潜水员

潜水员open in new window

分析

“至少”。

实现

#include <iostream>
#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 j = n; j >= 0; -- j)
            for (int k = m; k >= 0; -- k)
                f[j][k] = min(f[j][k], f[max(0, j - v1)][max(0, k - v2)] + w);
    }
    cout << f[n][m] << endl;
    return 0;
}
最后修改于: