题目

想法1:暴力解决
直接设k表示第i件物品有多少。
#include<iostream>
using namespace std;
const int MAX=1005;
int w[MAX];
int v[MAX];
int s[MAX];
int f[MAX][MAX];
int max(int a,int b){
if(a>b) return a;
else return b;
}
int main(){
int N,V,j;
cin>>N>>V;
for(int i=1;i<=N;i++){
cin>>v[i]>>w[i]>>s[i];
}
for(int i=1;i<=N;i++){
for(j=1;j<=V;j++){
for(int k=0;k<=s[i]&&k*v[i]<=j;k++)
f[i][j]=max(f[i][j],f[i-1]

这篇博客探讨了多重背包问题的解决策略,包括暴力求解、01背包转换、二进制拆分优化以及利用单调队列进行进一步优化。通过二进制拆分将问题简化,并介绍了单调队列在解决此类问题中的应用。
最低0.47元/天 解锁文章
1074

被折叠的 条评论
为什么被折叠?



