AC

♻️lzhh_lzhh32  •  2个月前


//两个最大->二维背包
#include<bits/stdc++.h>
using namespace std;
int mh,mt,n;
int h[55],k[55],t[55];
int dp[55][405][405];		//前i个,体积,质量
int main(){
	cin>>mh>>mt;		//体积最大值 质量最大值 
	cin>>n;		//食品总数
	for(int i=1;i<=n;i++) cin>>h[i]>>t[i]>>k[i];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=mh;j++){
			for(int g=1;g<=mt;g++){
				if(h[i]<=j&&t[i]<=g)
					dp[i][j][g]=max(dp[i-1][j][g],dp[i-1][j-h[i]][g-t[i]]+k[i]);
				else dp[i][j][g]=dp[i-1][j][g];
			}
		}
	}
	cout<<dp[n][mh][mt]<<endl;
	return 0;
}

评论:

请先登录,才能进行评论