思路
一个变型的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;
}


















