//两个最大->二维背包
#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;
}
全部回复 共 0 条
还没有人回复。往下写第一条。
发表回复
登录后即可回复本帖,与出题人和同学一起讨论。
登录