标签:
//锻炼准确度,争取一次A。 #include<stdio.h> #include<string.h> int max(int x,int y); int i,n,f[11111],v,a,d,c[11111],w[11111]; int main() { scanf("%d",&n); while(n--) { i=v=a=d=0; memset(f,0,sizeof(f)); memset(c,0,sizeof(c)); memset(w,0,sizeof(w)); scanf("%d%d",&a,&v);//骨头的数量,和背包的大小。 d=v; for(i=0;i<a;i++) { scanf("%d",&w[i]);//骨头的价值 } for(i=0;i<a;i++) { scanf("%d",&c[i]);//骨头的费用 } for(i=0;i<a;i++)//1 0 背包问题 简单。 { for(v=d;v>=0;v--) { if(v<c[i]) break; f[v]=max(f[v],f[v-c[i]]+w[i]); } } printf("%d\n",f[d]); } } int max(int x,int y) { int z; if(x>=y) z=x; else z=y; return z; }
经验:现在还是太马虎,考虑问题 想不到边缘情况,例如包的容量为零。还有忘了给上次用过得值清零。这次就坑在了这里,以后注意!!!
——————————————————————————————2602————————第一次背包——————————————
标签:
原文地址:http://www.cnblogs.com/A-FM/p/4996440.html