方便记忆
-
首先将土豪背包按容量 从小到大 ,一字排开
-
来一件物品就对这些个背包大款逐个询问:能把我娶了吗?
-
循环上述过程每个物品都有一次展示自己的机会
故事级别的注释
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int f[N];
int main()
{
int n,m;
scanf("%d%d", &n, &m);
int v,w;
while(n--){
scanf("%d%d", &v, &w);//美女排好队,一个一个入场
for (int j = v; j <= m; j ++ )//从能买得起自己的j号大款开始问,把我娶了吧!
f[j]=max(f[j],f[j-v]+w);//土豪背包想想划不划算
}
cout << f[m]<<endl;
return 0;
}
先读后取版本
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int f[N],v[N],w[N];
int main()
{
int n,m;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i ++ )
scanf("%d%d", &v[i], &w[i]);
for (int i = 0; i < n; i ++ )
for (int j = v[i]; j <= m; j ++ )//询问j号背包要不要自己
f[j]=max(f[j],f[j-v[i]]+w[i]);
cout << f[m]<<endl;
return 0;
}