https://www.acwing.com/problem/content/428/
给定总钱数n,和m个物品,每个物品有价格和重要度两个属性。
问在总价格不超过n的情况下,选中物品的价格*重要度的和最大是多少。
可以抽象为01背包模型,总钱数为背包容量,价格为物品体积,价格*重要度为物品价值。
1 #include<iostream> 2 using namespace std; 3 const int N=30000+10; 4 int v[N],w[N]; 5 int f[N]; 6 int main(void){ 7 int n,m; 8 cin>>n>>m; 9 for(int i=0;i<m;i++){ 10 cin>>v[i]>>w[i]; 11 } 12 for(int i=0;i<m;i++){ 13 for(int j=n;j>=v[i];j--){ 14 f[j]=max(f[j],f[j-v[i]]+v[i]*w[i]); 15 } 16 } 17 cout<<f[n]; 18 return 0; 19 }