原题:http://ybt.ssoier.cn:8088/problem_show.php?pid=1935
解释: 一道很普通的01背包。
注意要空间优化一下,然后在输入的时候就让价值乘上价格就行。
#include <iostream>
using namespace std;
int n,p,w[30],v[30],f[30005];
int main()
{
cin >> p >> n;
for(int i = 1; i <= n; i++){
cin >> w[i] >> v[i];
v[i]*=w[i];
}
for(int i = 1; i <= n; i++){
for(int j = p; j >= 0; j--){
if(j>=w[i]){
f[j]=max(f[j-w[i]]+v[i],f[j]);
}
}
}
cout << f[p];
}