http://www.bnuoj.com/bnuoj/problem_show.php?pid=16491

题意:有t组测试数据,每组测试数据第一行为n,m,接下来有n种跑法,m为最大的能力,每一种跑法占一行,有a,b,c,d,e。a表示快速跑完这段路途需要的时间,b表示平速跑完这段路途需要的时间,c表示慢速跑完需要花得时间,d表示快速跑完需要消耗的能量,e表示慢速跑完需要小号的能量,平速跑需要消耗的能量为0,问跑完n段路途所需要花得最少时间。

Sample Input

  1. 2
  2. 1 10
  3. 1 2 3 10 10
  4. 4 10
  5. 1 2 3 10 10
  6. 1 10 10 10 10
  7. 1 1 2 10 10
  8. 1 10 10 10 10

Sample Output

  1. 1
  2. 6
    思路:对于这类多种状态的dp,一般是需要将它的某一个值放入数组,然后将其所要求的值求出来。
    这道题,需要开二维,dp[i][j]表示,在第i段路途还有j点能量的时候所花的最少时间.....动态转移很好写,以前做过的题目中也有这类型的,这里不再重复‘
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. #define M 100000005
  6. int dp[150][150];
  7. int s[150][7];
  8. int main()
  9. {
  10. int text;
  11. scanf("%d",&text);
  12. while(text--)
  13. {
  14. int n,m;
  15. scanf("%d%d",&n,&m);
  16. for(int i=1;i<=n;i++)
  17. {
  18. for(int j=0;j<5;j++)
  19. scanf("%d",&s[i][j]);
  20. }
  21.  
  22. for(int i=0;i<=130;i++)
  23. for(int j=0;j<=130;j++)
  24. dp[i][j]=M;
  25. for(int i=0;i<=130;i++)
  26. dp[0][i]=0;
  27. for(int i=1;i<=n;i++)
  28. {
  29. for(int j=m;j>=0;j--)
  30. {
  31. if(j>=s[i][3])
  32. {
  33. int ans=j-s[i][3];
  34. if(dp[i][ans]>dp[i-1][j]+s[i][0])
  35. dp[i][ans]=dp[i-1][j]+s[i][0];
  36. }
  37. if(dp[i][j]>dp[i-1][j]+s[i][1])
  38. dp[i][j]=dp[i-1][j]+s[i][1];
  39. int tmp=j+s[i][4];
  40. if(tmp>m)
  41. tmp=m;
  42. if(dp[i][tmp]>dp[i-1][j]+s[i][2])
  43. dp[i][tmp]=dp[i-1][j]+s[i][2];
  44. }
  45. }
  46. int minx=M;
  47. for(int i=0;i<=m;i++)
  48. if(dp[n][i]<minx)
  49. minx=dp[n][i];
  50. printf("%d\n",minx);
  51. }
  52. return 0;
  53. }

bnuoj16491的更多相关文章

随机推荐

  1. c#委托是什么?事件是不是一种委托?

    C#的委托是CTS(公共类型系统)规定的5中类型之一(类类型.结构类型.接口类型.枚举类型.委托类型).它类似于c或c++中的函数的指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实 ...

  2. java 管道流代码示例

    import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream; public ...

  3. redis lpop key 当key不存在时,返回nil , 监测redis执行语句是否正常执行

    Lpop key 返回值: 列表的头元素. 当key 不存在时, 返回 nil . 需求:  开发在执行 lpop key 时, 出现问题 , 执行语句卡住, 不能执行下去 , 需对此做一个监测 由于 ...

  4. HDUOJ---2082

    找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. python学习笔记——爬虫的抓取策略

    1 深度优先算法 2 广度/宽度优先策略 3 完全二叉树遍历结果 深度优先遍历的结果:[1, 3, 5, 7, 9, 4, 12, 11, 2, 6, 14, 13, 8, 10] 广度优先遍历的结果 ...

  6. Python练习笔记——利用递归求年龄,第五个比第四个大2岁...

    现在有五个人, 第五个人比第四个人大两岁,18 第四个人比第三个人大两岁,16 第三个人比第二个人大两岁,14 第二个人比第一个人大两岁,12 第一个人现10岁,                 10 ...

  7. AME_AME审批中子元素的概念和用途(概念)

    2014-05-30 Created By BaoXinjian AME: Oracle Approvals Management AME的6个元素的概念和主要作用: Attribue  ->  ...

  8. Form_如何通过标准功能查找数据源(概念)

    2014-06-01 Created By BaoXinjian

  9. kafka linux 启动脚本 sample

    #!/bin/sh # # chkconfig: 345 99 01 # description: Kafka # # File : Kafka # # Description: Starts and ...

  10. linux centos7 常用命令【systemctl替换service】

    虽然linux的命令很多都是相同的,但是新版的centos 7 上面与以前的有些命令还是有所不同,不过还好,有提示.所以就在百度上面搜索了以下,作为记载,以后方便查看: centos7 上面启动服务以 ...