记录编号 |
353191 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[POI 1998] 潜水员的问题 |
最终得分 |
100 |
用户昵称 |
SPA |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.023 s |
提交时间 |
2016-11-17 20:51:10 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include <stdio.h>
#include <string.h>
#define Min(a, b) ((a) < (b) ? (a) : (b))
const size_t MAXN = 1000 + 11;
int weight[MAXN], Oxygen[MAXN], Nitrogen[MAXN];
int dp[81][81];
#define SUBMIT
int main() {
#ifdef SUBMIT
freopen("ple.in", "r", stdin);
freopen("ple.out", "w", stdout);
#endif
int n, O, N; scanf("%d%d%d", &O, &N, &n);
for (int i = 1; i <= n; ++i)
scanf("%d%d%d", Oxygen + i, Nitrogen + i, weight + i);
memset(dp, 0x3f, sizeof (dp)); dp[0][0] = 0;
for (register int i = 1, j, k, minN, minO; i <= n; ++i)
for (j = N; ~j; --j) for (k = O; ~k; --k) {
minN = Min(j + Nitrogen[i], N); minO = Min(k + Oxygen[i], O);
dp[minN][minO] = Min(dp[minN][minO], dp[j][k] + weight[i]);
}
printf("%d\n", dp[N][O]);
#ifndef SUBMIT
puts("\n--------------------");
getchar(); getchar();
#else
fclose(stdin); fclose(stdout);
#endif
return 0;
}