记录编号 353191 评测结果 AAAAAAAAAA
题目名称 [POI 1998] 潜水员的问题 最终得分 100
用户昵称 GravatarSPA 是否通过 通过
代码语言 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;
}