RE求调
查看原帖
RE求调
1191031
majingxuan123楼主2024/8/22 17:45
#include<iostream>
#include<cstring>
using namespace std;
int n,m,k,t;
int p[205],d[205];
int f[205][25][805];
int ans[205];
int main(){
	while(scanf("%d%d",&n,&m)!=1,n||m){
		k=0;
		for(int i=1;i<=n;i++)scanf("%d%d",&p[i],&d[i]);
		memset(f,0xcf,sizeof f);
		f[0][0][400]=0;
		for(int i=1;i<=n;i++){
			for(int j=0;j<=m;j++){
				for(int k=0;k<=800;k++){
					f[i][j][k]=f[i-1][j][k];
					int t=k-p[i]+d[i];
					if(!j)continue; 
					if(t<0||t>800)continue;
					f[i][j][k]=max(f[i][j][k],f[i-1][j-1][t]+p[i]+d[i]);
				}
			}
		}
		int v=0;
		while(f[n][m][400+v]<0&&f[n][m][400-v])v++;
		if(f[n][m][400-v]>f[n][m][400+v])v=400-v;		else v=400+v;
		int i=n,j=m;
		while(j){
			if(f[i][j][v]==f[i-1][j][v])i--;
			else{
				ans[++k]=i;
				v-=(p[i]-d[i]);
				i--,j--;
			}
		}
		int D=0,P=0;
		for(int i=1;i<=k;i++){
			D+=d[ans[i]];
			P+=p[ans[i]];
		}
		printf("Jury #%d\n",++t);
		printf("Best jury has value %d for prosecution and value %d for defence:\n",P,D);
		for(int i=k;i>=1;i--){
			printf(" %d",ans[i]);
		}
		printf("\n\n");
	}
	return 0;
}
2024/8/22 17:45
加载中...