背包板子题求教

P1060 [NOIP2006 普及组] 开心的金明

@[rainman](/space/show?uid=55804) 您的``for(int i=1;i<=n;i++)``应该改为``for(int i=1;i<=m;i++)``。建议您把背包的容量用$v$来表示,把物品的个数用$n$来表示。 下面放一下我的代码供您查错: ``` #include <cstdio> int t[1000001],m[1000001],f[1000001]; int maxx(int x,int y) { return x>y?x:y; } int main() { int v=0,n=0; scanf("%d %d",&v,&n); for(int i=1;i<=n;i++) { int x=0; scanf("%d %d",&t[i],&x); m[i]=t[i]*x; } for(int i=1;i<=n;i++) { for(int j=v-t[i];j>=0;j--) { f[j+t[i]]=maxx(f[j]+m[i],f[j+t[i]]); } } printf("%d",f[v]); return 0; } ```
by Drinkkk @ 2018-06-03 06:40:21


@[rainman](/space/show?uid=55804) ```cpp for(int i=1;i<=n;i++) // 为什么循环到 n { for(int v=n;v>=c[i];v--) f[v]=max(f[v],f[v-c[i]]+w[i]); } ```
by Anguei @ 2018-06-03 09:12:54


@[钟梓俊](/space/show?uid=48269) @[yyfcpp](/space/show?uid=53062) 感谢,问题已解决。
by xiangling @ 2018-06-03 12:22:26


|