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