Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
脑袋快暴了,求大家帮我看一下吧,WA的次数我已经数不过来了,算法我也想不出错误。真FAINT死了快。。。。给我找个错误数据也好,我真是没办法了实在是。。。。 #include<stdio.h> #include<stdlib.h> #define MAX 1001 typedef struct{ int sum; int dif;//d-p }candidate; typedef struct{ int x[210];//member int exist;//exist or not int total;//sum of d and p }ele; candidate C[210];//candidates ele*a;//rotating array a and b ele*b; int main(){ int m; int n; int d; int p; int i; int j; int t; int max; int l; int pos; int k; ele* temp; a=(ele*)malloc(MAX*sizeof(ele)); b=(ele*)malloc(MAX*sizeof(ele)); scanf("%d %d",&n,&m); k=1; while(n||m){ for(i=0;i<n;i++){ scanf("%d %d",&p,&d); C[i].sum=d+p; C[i].dif=d-p; } for(i=0;i<=1000;i++){ //i+500 is the real dif if(i==500){ a[i].exist=1; for(j=0;j<210;j++)a[i].x[j]=0; a[i].total=0; } else a[i].exist=0; } for(i=1;i<=m;i++){ for(j=0;j<=1000;j++){ //j-500 is the real d(J)-d(p) max=-1; pos=-1; for(t=0;t<n;t++) if(j-C[t].dif>=0&&j-C[t].dif<=1000) if(a[j-C[t].dif].exist&&!a[j-C[t].dif].x[t]){ b[j].exist=1; if(max<=C[t].sum+a[j-C[t].dif].total){ max=C[t].sum+a[j-C[t].dif].total; pos=t; } } if(max==-1)b[j].exist=0; else { for(l=0;l<n;l++)b[j].x[l]=a[j-C[pos].dif].x[l]; b[j].x[pos]=1; b[j].total=max; } } temp=a; a=b; b=temp; } max=10000000; p=0; d=0; printf("Jury #%d\n",k); for(i=0;i<MAX;i++) if(a[i].exist){ if((i-500)<0){ if(max>500-i){ max=500-i; pos=i; } } else if(max>i-500){ max=i-500; pos=i; } } for(i=0;i<n;i++) if(a[pos].x[i]){ d+=(C[i].sum+C[i].dif)/2; p+=(C[i].sum-C[i].dif)/2; } printf("Best jury has value %d for prosecution and value %d for defence:\n",p,d); for(i=0;i<n;i++) if(a[pos].x[i])printf(" %d",i+1); printf("\n\n"); scanf("%d %d",&n,&m); k++; } system("PAUSE"); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator