记录编号 322324 评测结果 AAAAAAAAAA
题目名称 [POI 1998] 潜水员的问题 最终得分 100
用户昵称 GravatarH_Lost 是否通过 通过
代码语言 C 运行时间 0.054 s
提交时间 2016-10-14 23:41:23 内存使用 6.38 MiB
显示代码纯文本
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NUM 1010
  4. #define OO 22
  5. #define NN 80
  6. #define MAX 99999999
  7. int dp[NUM][OO][NN];
  8. int n,o2,n2,onum[NUM],nnum[NUM],osum[NUM],nsum[NUM],w[NUM];
  9. FILE *f,*g;
  10. int min(int x,int y){return (x<y)?x:y;}
  11. int toz(int x){return (x<0)?0:x;}
  12. void init(){
  13. int i,j,k;
  14. fscanf(f,"%d %d\n%d",&o2,&n2,&n);
  15. for(i=0;i<=n;i++){
  16. for(j=0;j<=o2;j++){
  17. for(k=0;k<=n2;k++)dp[i][j][k]=MAX;
  18. }
  19. }
  20. fscanf(f,"%d %d %d",&onum[1],&nnum[1],&w[1]);
  21. osum[1]=onum[1];
  22. nsum[1]=nnum[1];
  23. for(i=2;i<=n;i++){
  24. fscanf(f,"%d %d %d",&onum[i],&nnum[i],&w[i]);
  25. osum[i]=onum[i]+osum[i-1];
  26. nsum[i]=nnum[i]+nsum[i-1];
  27. }
  28. dp[0][0][0]=0;
  29. }
  30. int main(){
  31. int i,j,k;
  32. f=fopen("ple.in","r");
  33. g=fopen("ple.out","w");
  34. init();
  35. for(i=1;i<=n;i++){
  36. for(j=0;j<=min(osum[i],o2);j++){
  37. for(k=0;k<=min(nsum[i],n2);k++){
  38. dp[i][j][k]=min(dp[i-1][j][k],dp[i-1][toz(j-onum[i])][toz(k-nnum[i])]+w[i]);
  39. }
  40. }
  41. }
  42. fprintf(g,"%d",dp[n][o2][n2]);
  43. fclose(f);
  44. fclose(g);
  45. }