♻️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;
}
评论:
请先登录,才能进行评论