• 动态规划代码 加注释


    动态规划的原理就不多讲了,网上一大堆,google一下就明白了,直接上代码

     1 public class DynamicPlan {
     2     // 100 个人 挖 5 个矿
     3     private static int peopleCount=100;
     4     private static int poolCount=5;
     5     // 挖每个矿时需要的人数
     6     private static int[] peopleNeed={77,22,29,50,99};
     7     // 每个矿可以挖出来的金币数
     8     private static int[] goldEach={92,22,87,46,90};
     9     // 挖矿中间过程的备忘
    10     private static Integer[][] backup=new Integer[100][5];
    11     public static void main(String[] args) {
    12         for(int i=0;i<peopleCount;i++) {
    13             for(int j=0;j<poolCount;j++) {
    14                 backup[i][j]=-1;
    15             }
    16         }
    17         int max=getMaxGold(peopleCount-1,poolCount-1);
    18         System.out.println(max);
    19     }
    20     
    21     public static int getMaxGold(int peopleCount,int poolNum) {
    22         int maxGold=0;
    23         //m个人挖n个矿时金币数的备忘,遇到相同数量时直接得到结果
    24         if(backup[peopleCount][poolNum]!=-1) {
    25             maxGold=backup[peopleCount][poolNum];
    26         } else if(poolNum==0) {
    27             // 只剩下一个矿,人数够,金币数为矿值,人数不够为0
    28             if(peopleCount>=peopleNeed[poolNum]) {
    29                 maxGold=goldEach[poolNum];
    30             } else {
    31                 maxGold=0;
    32             }
    33         } else if(peopleCount>=peopleNeed[poolNum]) {
    34             // 不是只剩下一个矿,且人数大于挖当前矿需要的人数,
    35             // 挖当前矿时,获得的最大金币为 剩下的人数减去挖当前矿需要的人数 去挖 除去当前矿剩下的矿获得的金币值 加上当前矿能挖出的金币值
    36             // 不挖当前矿时,获得的最大金币为 当前剩下的所有人 去挖 除去当前矿剩下的矿获得的金币值
    37             // 两者中的最大值为 剩余人数挖剩余矿时获得金币的最大值
    38             maxGold=Math.max(getMaxGold(peopleCount-peopleNeed[poolNum],poolNum-1)+goldEach[poolNum],
    39                     getMaxGold(peopleCount,poolNum-1));
    40         } else {
    41             // 不是只剩下一个矿,剩余人数小于挖当前矿需要的人数,
    42             // 当前剩下的所有人数去挖除去当前矿剩下的矿所得的金币数
    43             maxGold=getMaxGold(peopleCount,poolNum-1);
    44         }
    45         // 将当前人数挖当前矿数获得金币的最大值保存
    46         backup[peopleCount][poolNum]=maxGold;
    47         return maxGold;
    48     }
    49 }
  • 相关阅读:
    如何调试在OJ中的代码
    在linux命令行中调试在OJ上的c++代码
    jar包
    stanford core
    decode encode
    访问服务器,远程访问linux主机
    代码18
    删除列表中的元素
    if __name__ == '__main__'
    苹果要求全部新app以及版本号更新必须支持iOS 8 SDK和64-bit
  • 原文地址:https://www.cnblogs.com/russellwang/p/3761065.html
Copyright © 2020-2023  润新知