记录编号 8648 评测结果 AAAAAAAAAA
题目名称 [POI 1998] 潜水员的问题 最终得分 100
用户昵称 GravatarBYVoid 是否通过 通过
代码语言 C++ 运行时间 0.224 s
提交时间 2008-12-02 22:10:35 内存使用 0.32 MiB
显示代码纯文本
/* 
 * Problem: POI1998 ple
 * Author: Guo Jiabao
 * Time: 2008.12.01 21:20:34
 * State: Unsolved
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>

using namespace std;

const int MAXN=1001;
const int M_O=80;
const int M_N=M_O;
const int INF=0x7FFFFFF;

int F[2][M_O][M_N];
int P[MAXN],Q[MAXN],C[MAXN];
int N,T_O,T_N,Ans;

void init()
{
	int i,j,k;
	freopen("ple.in","r",stdin);
	freopen("ple.out","w",stdout);
	scanf("%d%d%d",&T_O,&T_N,&N);
	for (i=1;i<=N;i++)
	{
		scanf("%d%d%d",&P[i],&Q[i],&C[i]);
	}
	for (i=0;i<=1;i++)
	{
		for (j=0;j<M_O;j++)
		{
			for (k=0;k<M_N;k++)
			{
				F[i][j][k]=INF;
			}
		}
		F[i][0][0]=0;
	}
}

void dynamic()
{
	int i,j,k,p;
	Ans=INF;
	for (i=p=1;i<=N;i++,p=!p)
	{
		for (j=1;j<M_O;j++)
		{
			for (k=1;k<M_N;k++)
			{
				F[p][j][k]=F[!p][j][k];
				if (j-P[i]<0 && k-Q[i]<0 && C[i] < F[p][j][k])
					F[p][j][k]=C[i];
				if (j-P[i]>=0 && k-Q[i]>=0 && F[!p][j-P[i]][k-Q[i]] + C[i] < F[p][j][k])
					F[p][j][k]=F[!p][j-P[i]][k-Q[i]] + C[i];
				if (i==N && j>=T_O && k>=T_N && F[p][j][k]<Ans)
					Ans=F[p][j][k];
			}
		}
	}
}

int main()
{
	init();
	dynamic();
	printf("%d",Ans);
	return 0;
}