动规23:1020
作者:
总打瞌睡的天天啊
,
2024-10-16 15:47:44
,
所有人可见
,
阅读 1
//状态表示:f[i][j][k],在前i个气缸中选,氧气不少于j,氮气不少于k,的最低重量
//状态转移:第i个物品不选:f[i-1][j][k]
// 第i个物品选: f[i-1][j-v[i]][k-m[i]]
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int M=85,B=1010;
int f[M][M];
int o[B],n[B],w[B];
int main()
{
int m,r;
int k;
cin>>m>>r>>k;
for(int i=1;i<=k;i++)cin>>o[i]>>n[i]>>w[i];
memset(f, 0x3f, sizeof f); //求最小值要把除初始状态以外的所有状态初始化为+∞
f[0][0] = 0; //这里我们把所有j,k小于0的初始状态都合并到f[0][0][0]中来转移,也就是下面的max操作
for(int i=1;i<=k;i++)
for(int j=m;j>=0;j--)
for(int t=r;t>=0;t--)
f[j][t]=min(f[j][t],f[max(j-o[i],0)][max(t-n[i],0)]+w[i]);
cout<<f[m][r]<<endl;
return 0;
}