@[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