记录编号 |
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);
- }