算法基础--动态规划(笔试记录)

蔚落 2022-05-08 05:52 227阅读 0赞
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. //输入部分
  6. //输入宝箱的个数n,和现在还剩余的魔法值w
  7. int n,w;
  8. cin>>n>>w;
  9. //int n = 5,w = 10;
  10. int x,y;
  11. //p[i]为第i个宝箱所需要的魔法值
  12. //v[i]为第i个宝箱里面的金币数
  13. int p[n+1];
  14. int v[n+1];
  15. p[0] = 0;
  16. v[0] = 0;
  17. //输入第i个宝箱对应的金币数和所需魔法值
  18. for(int i = 1;i<=n;i++){
  19. cin>>y>>x;
  20. v[i] = y;
  21. p[i] = x;
  22. }
  23. int Preresult[w+1];
  24. int t;
  25. //先赋值
  26. for(int i = 1;i <= w;i++){
  27. if(i<p[1])
  28. {
  29. Preresult[i] = 0;
  30. }
  31. else{
  32. Preresult[i] = v[1];
  33. }
  34. }
  35. //使用动态规划的方法,使局部最优从而达到整体最优
  36. int result[w+1] = {0};
  37. Preresult[0] = 0;
  38. //n为宝箱的个数
  39. for(int i = 2;i<=n;i++){
  40. //w为人数
  41. for(int j=1;j<=w;j++){
  42. //总人数-一个宝箱需要的魔法值
  43. if(j<p[i]){
  44. //赋予它一个相对来说特别小的数
  45. t = -123456;
  46. }
  47. else{
  48. t = Preresult[j-p[i]];
  49. }
  50. result[j] = max(Preresult[j],t+v[i]);
  51. }
  52. for(int k = 1;k<=w;k++){
  53. Preresult[k] = result[k];
  54. }
  55. }
  56. cout<<result[w]<<endl;
  57. }

发表评论

表情:
评论列表 (有 0 条评论,227人围观)

还没有评论,来说两句吧...

相关阅读

    相关 动态规划算法

    一:动态规划算法 1:动态规划算法介绍 1) 动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获

    相关 动态规划算法

           动态规划方法是对解最优问题的一种方法,一种途径,并不是一种特殊的算法。        执行步骤:                1. 找出最优解的性质,刻画结