1 条题解
-
0
思路
物品数量上限10,预算6000;二进制拆分须保持数量上限,优化的是价值而非价格。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int main(){int n,m;cin>>n>>m;vector<int>d(m+1);while(n--){int v,w,s;cin>>v>>w>>s;for(int k=1;s;k*=2){int z=min(k,s);s-=z;for(int j=m;j>=z*v;j--)d[j]=max(d[j],d[j-z*v]+z*w);}}cout<<d[m]<<'\n';}
- 1