AcWing 1020. 潜水员
潜水员为了潜水要使用特殊的装备。
他有一个带2种气体的气缸:一个为氧气,一个为氮气。
让潜水员下潜的深度需要各种数量的氧和氮。
潜水员有一定数量的气缸。
每个气缸都有重量和气体容量。
潜水员为了完成他的工作需要特定数量的氧和氮。
他完成工作所需气缸的总重的最低限度的是多少?
输入格式
第一行有2个整数 m,n。它们表示氧,氮各自需要的量。
第二行为整数 k,表示气缸的个数。
此后的 k行,每行包括ai,bi,ci,3个整数。这些各自是:第 i个气缸里的氧和氮的容量及气缸重量。
输出格式
仅一行包含一个整数,为潜水员完成工作所需的气缸的重量总和的最低值。
数据范围
1≤m≤21
1≤n≤79
1≤k≤1000
1≤ai≤21
1≤bi≤79
1≤ci≤800
5 60
5
3 36 120
10 25 129
5 50 250
1 45 130
4 20 119
249
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=22,M=80;
int n,m,k;
int f[N][M];
int main()
{
cin>>n>>m>>k;
memset(f,0x3f,sizeof f);//求最小值 将其余初始化为正无穷
f[0][0]=0;
while(k--)
{
int v1,v2,w;
cin>>v1>>v2>>w;
for(int i=n;i>=0;i--)//至少问题时 前面的可以体积可以为0
{
for(int j=m;j>=0;j--)
{
f[i][j]=min(f[i][j],f[max(i-v1,0)][max(j-v2,0)] + w );//负数时置为0
}
}
}
cout<<f[n][m]<<endl;
return 0;
}