/ Vijos / 讨论 / 采药 /

各位同学!!求助啊!!真的不知道哪里错了!!!!感激不尽啊!!

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
int p[1001],w[101];
int t,m,f[1001][101];
memset(f,0,sizeof(f));
memset(w,0,sizeof(w));
memset(p,0,sizeof(p));
cin>>t>>m;
for(int i=1;i<=m;i++)
{
cin>>w[i]>>p[i];
}
for(int i=1;i<=m;i++)
{
for(int j=0;j<=t;j++)
{
f[i][j]=f[i-1][j];
if((j>=w[i])&&((f[i-1][j-w[i]]+p[i])>f[i][j]))
{
f[i][j]=f[i-1][j-w[i]]+p[i];
}
}
}
cout<<f[m][t]<<endl;
return 0;
}

3 条评论

  • @ 2015-10-06 13:42:13

    愚蠢的地球人呐~!

  • @ 2014-11-09 22:49:15

    for(int j=t;j>=w[i];j--)是 从最后那个大的开始,最后一个来排,但是 我用for(int j=0;j<=t;j++)从前面来排,我觉得这两个没有区别==,数组 一维二维 不要紧吧....

  • @ 2014-11-08 17:00:30

    for(int j=0;j<=t;j++) 改成 for(int j=t;j>=w[i];j--)
    方程可以改成一维的 f[j]=max(f[j],f[j-w[i]]+p[i])

  • 1

信息

ID
1104
难度
4
分类
动态规划 | 背包 点击显示
标签
递交数
16820
已通过
6526
通过率
39%
被复制
38
上传者