题解:P1060 [NOIP2006 普及组] 开心的金明
solution
01 背包问题。
记
考虑转移。假设当前已经处理好了前
综上,转移是
由于对物品
最后我们注意枚举顺序,是从大到小的,否则则会出现一个物品多次放入背包的情况。
code
#include<bits/stdc++.h>
using namespace std;
int n, m, f[30001], v[30], p[30];
int main(){
cin >> n >> m;
for(int i=1; i<=m; i++)
cin >> v[i] >> p[i],
p[i]*=v[i];
for(int i=1; i<=m; i++)
for(int j=n; j>=v[i]; j--)
f[j]=max(f[j], f[j-v[i]]+p[i]);
cout << f[n];
return 0;
}