记录编号 379151 评测结果 AAAAAAAAAA
题目名称 [POI 1998] 潜水员的问题 最终得分 100
用户昵称 GravatarHeHe 是否通过 通过
代码语言 C++ 运行时间 1.272 s
提交时间 2017-03-05 19:53:09 内存使用 4.14 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define is_num(tmp) (tmp<='9'&tmp>='0')
inline int in(){
	char tmp(getchar());
	int res(0),f(1);
	while(!(is_num(tmp)||tmp=='-'))tmp=getchar();
	if(tmp=='-')f=-1,tmp=getchar();
	while(is_num(tmp))
		res=(res<<1)+(res<<3)+(tmp^48),
		tmp=getchar();
	return res*f;
}
//#define LOCAL
#define MAXN 1001
int O2,N2,n,ans(0x7ffffff);
int O[MAXN],N[MAXN],W[MAXN];
int dp[1000][1000];
int main(){
#ifndef LOCAL
	freopen("ple.in","r",stdin);
	freopen("ple.out","w",stdout);
#endif
	O2=in(),N2=in();
	n=in();
	memset(dp,0x7f,sizeof(dp));
	dp[0][0]=0;
	for(int i=1;i<=n;++i){
		O[i]=in(),N[i]=in(),W[i]=in();
	}
	for(int i=1;i<=n;++i){
		for(int j=400;j>=O[i];--j){
			for(int k=400;k>=N[i];--k){
				dp[j][k]=min(dp[j][k],dp[j-O[i]][k-N[i]]+W[i]);
			}
		}
	}
	for(int i=O2;i<400;++i){
		for(int j=N2;j<400;++j){
			if(ans>dp[i][j])ans=dp[i][j];
		}
	}
	printf("%d",ans);
}