- 采药
- 2014-11-08 11:42:19 @
#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 条评论
-
12958954 LV 6 @ 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