posted on 2007-09-14 02:11 流牛ζ木马 阅读(4063) 评论(7) 编辑 收藏 引用
如果输入是:2 0 0 0 0 0 结果是:Can't be divided.? 回复 更多评论
您好,我是刚接触ACM的菜鸟,拜读了您的解题思想,有个问题想请教一下,就是那个状态数组最大为60000个,这个数据有什么根据吗? 回复 更多评论
上面的提到状态数组最大为60000,是根据题意得出的,题意说最多有20000块石头,则一个人的最大价值为60000 回复 更多评论
博主能不能将43行代码的opt[j+k*i]满足就跳出循环解释一下,小弟认为在当该条件满足时不一定要跳出循环(此处可能博主有误),因为opt[j+k*(i+1)]不一定计算出,所以循环有必要进行下去,如小弟理解有误,望博主指点。小弟的AC代码(算法思想按博主所写):http://hi.baidu.com/黄河勇者 回复 更多评论
博主能不能将43行代码的opt[j+k*i]满足就跳出循环解释一下 回复 更多评论
Problem: 1014 User: 0809114213 Memory: 172K Time: 0MS Language: C Result: Accepted #include<stdio.h> #include<string.h> int shuzu[7]; char hehe[7][5000]; int f(int n,int sum) { int s=0,i=0,t=0; if(!sum) return 1; if(!n) if(sum) return 0; for(i=0;i<shuzu[n];i++) if((s+=n)>sum) break; if(s>sum) s-=n; for(i=s/n;i>=0;i--) for(t=1;t<=n-1;shuzu[0]+=shuzu[t]*t,t++) if(shuzu[0]+(s/n-i)*n>=sum-i*n) if(hehe[n-1][sum-i*n]!='0') if(f(n-1,sum-i*n)) return 1; else hehe[n-1][sum-i*n]='0'; return 0; } void main(void) { int num=0,h=0,n=0; while(1) { n=0; memset(shuzu,0,sizeof(int)*7); memset(hehe,'1',sizeof(char)*35000); for(h=1;h<=6;n+=shuzu[h]*h,h++) scanf("%d",shuzu+h); if(!n) break; if(n%2) printf("Collection #%d:\nCan't be divided.\n\n",++num); else if(f(6,n/2)) printf("Collection #%d:\nCan be divided.\n\n",++num); else printf("Collection #%d:\nCan't be divided.\n\n",++num); } } 回复 更多评论
Powered by: C++博客 Copyright © 流牛ζ木马