1.题目
题目链接:点这儿!
2.解决方法
在基础的01背包问题上增加了一维花费,原来只有体积,现在多了一维重量;同样采用和01背包相同的思路,循环枚举体积和重量;原先优化的一维数组这里也要变成二维数组。
3.代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=1010,MAXM=110;
int n,m,h,f[MAXM][MAXM],v[MAXN],w[MAXN],s[MAXN];
int main(void)
{
cin>>n>>m>>h;
for(int i=1;i<=n;i++)
cin>>v[i]>>s[i]>>w[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=v[i];j--)
for(int q=h;q>=s[i];q--)//多了重量维,那么就多一层循环,原来的一维数组变成二维数组
f[j][q]=max(f[j][q],f[j-v[i]][q-s[i]]+w[i]);
cout<<f[m][h]<<endl;
return 0;
}