include [HTML_REMOVED]
include “vector”
using namespace std;
struct Node {
int v, w;
};
int dp[1010][1010];
int main() {
int N,V;
cin>>N>>V;
vector<Node> ns;
int v,w,s;
for(int i = 1;i<=N;i++){
cin>>v>>w>>s;
int k = 1;
while (s!=0){
if(s>=k){
ns.push_back(Node{k*v,k*w});
s = s-k;
k = k*2;
} else{
ns.push_back(Node{s*v,s*w});
s = 0;
}
}
}
ns.insert(ns.begin(),{0,0});
for(auto i:ns){
cout<<i.v<<" "<<i.w<<endl;
}
int maxer = -1;
for(int i = 1;i<ns.size();i++){
for(int j = 0;j<=V;j++){
if(j<ns[i].v){
dp[i][j] = dp[i-1][j];
} else{
dp[i][j]=max(dp[i-1][j],dp[i-1][j-ns[i].v]+ns[i].w);
}
maxer = max(dp[i][j],maxer);
}
}
cout<<maxer;
return 0;
}
二进制+二维数组题解
只能解决多重背包1问题。
因为2的话需要开dp[25000][25000];
显然越界