这个题也是01背包,但是加了一点限制条件,基本上和采药那一篇一样,我们只需要多加一个循环,因为多了一个条件。所以i此时表示的是背包容量,而j表示的则是背包的重量。
#include<bits/stdc++.h>
using namespace std;
int dp[1000][1000];
int w[1000],v[1000],g[1000];
int main()
{
int n,m;
cin>>n>>m;
int q;
cin>>q;
for(int i=1;i<=q;i++)
{
cin>>w[i]>>v[i]>>g[i];
}
dp[0][0]=0;
for(int k=1;k<=q;k++)
{
for(int i=n;i>=v[k];i--)
{
for(int j=m;j>=g[k];j--)
{
dp[i][j]=max(dp[i][j],dp[i-v[k]][j-g[k]]+w[k]);
}
}
cout<<dp[n][m]<<endl;
return 0;
}