比赛 2008haoi模拟训练3 评测结果 AAAAWETWWA
题目名称 潜水员的问题 最终得分 50
用户昵称 BYVoid 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2008-04-24 11:19:17
显示代码纯文本
#include <iostream>
#include <fstream>
#define PY 250

using namespace std;

typedef struct
{
	long O,N,W;
}bottle;

ifstream fi("ple.in");
ofstream fo("ple.out");

long F[500][500][1001];
bottle B[1001];
long N,O2,N2,INF;

void init()
{
	long i;
	fi >> O2 >> N2 >> N;
	for (i=1;i<=N;i++)
	{
		fi >> B[i].O >> B[i].N >> B[i].W;
	}
//	memset(F,0xf,sizeof(F));
	INF=0x7FFFFFF;
}

inline long min(long a,long b)
{
	return a<b?a:b;
}

long dynamic(long i,long j,long k)
{
	if (i<=0 && j<=0)
		return 0;
	long m,P=INF,Q=INF;

	if (k==1)
	{
		if(B[1].O>=i && B[1].N>=j)
			return B[1].W;
		else
			return INF;
	}

	if (k>1)
	{
		if (F[i+PY][j+PY][k-1]==0)
			P=F[i+PY][j+PY][k-1]=dynamic(i,j,k-1);
		if (F[i+PY-B[k].O][j+PY-B[k].N][k-1]==0)
			Q=F[i+PY-B[k].O][j+PY-B[k].N][k-1]=dynamic(i-B[k].O,j-B[k].N,k-1)+B[k].W;
	}
	m=min(P,Q);
	return m;
}

void print()
{
	fi.close();
	fo.close();
}

int main()
{
	init();
	fo << dynamic(O2,N2,N);
	print();
	return 0;
}