AcWing 1020. 潜水员(含注释)
原题链接
简单
作者:
Kaguya
,
2021-03-03 14:18:02
,
所有人可见
,
阅读 349
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
int m, n, k, i, j,l, a[1001], b[1001], c[1001],f[22][80];
//二维数组f压缩所有解,存储只用前i个罐子时,需氧气j和氮气l的情况下的最优解.
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin >> m >> n>>k;
for (i = 1; i <= k; i++)cin >> a[i] >> b[i] >> c[i];
for (j = 0; j <= m; j++)
for (l = 0; l <= n; l++) f[j][l] = 999999;
//根据实际情况出发,只用前0个罐子的情况下j+l>0的情况无解,初始化为999999
f[0][0] = 0;
for (i = 1; i <= k; i++)
for (j = m; j >=0 ; j--)
for (l = n; l >=0; l--)
f[j][l] = min(f[j][l], f[max(j - a[i],0)][max(l - b[i],0)] + c[i]);
//第一项为不用该罐子,第二项为用该罐子,注意若该罐子a[i]>j,即为使用该罐子以后剩余所需氧气归零,应
//归类到[0]情况处理.
cout << f[m][n];
return 0;
}