请升级 HydroOJ 到 4.16.0 以上版本以正常使用此插件功能。
  • 个人简介

    #include<bits/stdc++.h>
    using namespace std;
    int T,n,m,k,a[105][1005][2],dp[105],cha[105],ans;
    bool flag[105];
    //dp[i] 前 i 个人的最大总好感度且有一种食物占一半以上 
    int solve(int k){
    	int now=0;
    	for(int i=1;i<=n;i++){
    		if(a[i][k][0]>=a[i][k][1]){
    			dp[i]=dp[i-1]+a[i][k][0];
    			now++;
    			cha[i]=a[i][k][0]-a[i][k][1];
    			flag[i]=0;
    		}
    		else if(now>n/2){
    			dp[i]=dp[i-1]+a[i][k][1];
    			cha[i]=a[i][k][1]-a[i][k][0];
    			flag[i]=1;
    		}
    		else{
    			cha[i]=a[i][k][1]-a[i][k][0];
    			int MIN=2e9,MINN;
    			for(int j=1;j<n;j++){
    				if(flag[j]==1){
    					MIN=min(MIN,cha[j]);
    					MINN=j;
    				}
    			}
    			if(cha[i]>MIN){
    				flag[MINN]=0;
    				cha[MINN]=-cha[MINN];
    				flag[i]=1;
    				dp[i]=dp[i-1]+2*cha[MINN]+cha[i];
    			}
    			else{
    				flag[i]=0;
    				cha[i]=-cha[i];
    				dp[i]=dp[i-1]+cha[i]; 
    			}
    		}
    	}
    	return dp[n];
    }
    int main(){
    	freopen("food.in","r",stdin);
    	freopen("food.out","w",stdout);
    	cin>>T;
    	while(T--){
    		ans=0;
    		cin>>n>>m;
    		for(int i=1;i<=n;i++){
    			int MAX=-1,sMAX=-1;
    			for(int j=1;j<=m;j++){
    				scanf("%d",&a[i][j][0]);
    				if(a[i][j][0]>=sMAX){
    					if(a[i][j][0]>=MAX){
    						sMAX=MAX;
    						MAX=a[i][j][0];
    					}
    					else{
    						sMAX=a[i][j][0]; 
    					}
    				}
    				MAX=max(MAX,a[i][j][0]);
    			}
    			for(int j=1;j<=m;j++){
    				if(a[i][j][0]==MAX)a[i][j][1]=sMAX;
    				else a[i][j][1]=MAX;
    			}
    		}
    		for(int i=1;i<=m;i++){
    			ans=max(ans,solve(i));
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
  • 通过的题目

  • 最近活动

    This person is lazy and didn't join any contests or homework.
  • 最近编写的题解

    This person is lazy and didn't write any solutions.

题目标签

系统测试
1