思路
一个变型的DP
这道题增加了一个维度,其他地方和其他的01背包没有任何区别
只是状态转移方程由变成了
dp[j][k]=max(dp[j][k],dp[j-c[i]][k-b[i]]+a[i]);
还要注意一点,不能开三维的数组,会MLE。
代码
#include<bits/stdc++.h>
#define endl '\n';
using namespace std;
long long n,m,x,a[110],b[1010],c[1010],dp[1111][1111];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>x;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i]>>c[i];
}for(int i=1;i<=n;i++){
for(int j=x;j>=c[i];j--){
for(int k=m;k>=b[i];k--){
dp[j][k]=max(dp[j][k],dp[j-c[i]][k-b[i]]+a[i]);
}
}
}cout<<dp[x][m];
return 0;
}