记录编号 |
322324 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[POI 1998] 潜水员的问题 |
最终得分 |
100 |
用户昵称 |
H_Lost |
是否通过 |
通过 |
代码语言 |
C |
运行时间 |
0.054 s |
提交时间 |
2016-10-14 23:41:23 |
内存使用 |
6.38 MiB |
显示代码纯文本
#include <stdio.h>
#include <stdlib.h>
#define NUM 1010
#define OO 22
#define NN 80
#define MAX 99999999
int dp[NUM][OO][NN];
int n,o2,n2,onum[NUM],nnum[NUM],osum[NUM],nsum[NUM],w[NUM];
FILE *f,*g;
int min(int x,int y){return (x<y)?x:y;}
int toz(int x){return (x<0)?0:x;}
void init(){
int i,j,k;
fscanf(f,"%d %d\n%d",&o2,&n2,&n);
for(i=0;i<=n;i++){
for(j=0;j<=o2;j++){
for(k=0;k<=n2;k++)dp[i][j][k]=MAX;
}
}
fscanf(f,"%d %d %d",&onum[1],&nnum[1],&w[1]);
osum[1]=onum[1];
nsum[1]=nnum[1];
for(i=2;i<=n;i++){
fscanf(f,"%d %d %d",&onum[i],&nnum[i],&w[i]);
osum[i]=onum[i]+osum[i-1];
nsum[i]=nnum[i]+nsum[i-1];
}
dp[0][0][0]=0;
}
int main(){
int i,j,k;
f=fopen("ple.in","r");
g=fopen("ple.out","w");
init();
for(i=1;i<=n;i++){
for(j=0;j<=min(osum[i],o2);j++){
for(k=0;k<=min(nsum[i],n2);k++){
dp[i][j][k]=min(dp[i-1][j][k],dp[i-1][toz(j-onum[i])][toz(k-nnum[i])]+w[i]);
}
}
}
fprintf(g,"%d",dp[n][o2][n2]);
fclose(f);
fclose(g);
}