美文网首页
2019-11-04 回溯算法

2019-11-04 回溯算法

作者: zecan | 来源:发表于2019-11-04 20:12 被阅读0次

package others;

import java.util.Arrays;

/**

  • 动态规划算法计算10个工人在5个金矿能获得的最大价值
  • @author Administrator

*/
public class GetBestGold {
public static void main(String[] args) {
//工人10个
int w = 10;
//金矿开采所需的工人数量
int[] p = {5,5,3,4,3};
//金矿价值
int[] v ={400,500,200,300,350};
int maxVal = getMaxGoldV2(w,p,v);
System.out.println(maxVal);
}

private static int getMaxGoldV1(int w, int[] p, int[] v) {
    //结果表f(n,w),
    //n表示金矿的可选择范围,从1到5
    //w表示工人数量
    //result[i][j]表示,再有i个金矿可选的情况下,有j个工人能过获取的最大金矿值
    int[][] resultTable = new int[v.length +1][w+1];
    
    for(int i = 1; i <= v.length; i++){
        for(int j = 1; j <= w; j++){
            //如果人数不够采第i座金矿,只能获得前i-1座金矿的价值
            if(j < p[i -1]){
                resultTable[i][j] = resultTable[i-1][j];
            }else{
                //resultTable[i-1][j] 表示在有i -1做金矿可选的情况下,j个工人 如果不拿下第i-1座金矿能获得的价值
                // resultTable[i-1][j - p[i-1]] + v[i-1]  表示在有i -1做金矿可选的情况下,如果拿下第i-1座金矿能获得的价值
                resultTable[i][j] = Math.max(resultTable[i-1][j],
                         resultTable[i-1][j - p[i-1]] + v[i-1]);
            }
            
        }
    }
    
    return resultTable[v.length][w];
}

private static int getMaxGoldV2(int w, int[] p, int[] v) {
    int[] results = new int[w+1];
    
    //填充一维数组
    for(int i = 1; i <= p.length; i++)
        //如果是从左边开始,那么已经获得的金矿可以重新获得第二遍,最终永远只会获取性价比最高的

// for(int j = 1; j <= w;j++){
//如果从右边开始,默认就是先计算没有当前金矿的,然后加上当前金矿再比,不会获取多次
for(int j = w; j >= 1;j--){
if(j >= p[i-1]){
results[j] = Math.max(results[j],
results[j -p[i-1]] + v[i-1]);
}
}

    System.out.println(Arrays.toString(results));
    return results[w];
}

}

相关文章

  • 2019-11-04 回溯算法

    package others; import java.util.Arrays; /** 动态规划算法计算10个工...

  • 回溯算法

    回溯算法 回溯算法介绍   回溯算法并不是非常复杂的算法, 很多人接触过但是未必知道这是回溯算法; 典型的回溯算法...

  • 回溯算法:八皇后问题和0-1背包问题

    文章结构 如何理解回溯算法 回溯算法的经典应用 完整源码 图片来源 1. 如何理解回溯算法 1.1 什么是回溯算法...

  • Algorithm进阶计划 -- 回溯算法

    滑动窗口算法回溯算法框架回溯算法运用 1. 回溯算法框架 回溯算法,是类似枚举的搜索尝试过程,主要是在搜索尝试过程...

  • 回溯算法总结

    回溯法学习总结 回溯算法也是算法导论中常用的算法,回溯算法类似于暴力求解算法,经常用在求可能解的问题。下面我将从三...

  • 77. Combinations.go

    回溯算法

  • 递归2-回溯与递归

    I. 回溯算法基础 回溯与递归的区别和联系  很多人不理解回溯与递归到底是什么关系。其实很简单,回溯算法是一种算法...

  • 回溯算法之-组合总和

    回溯算法模版 首先上一套回溯算法模版,很多回溯算法都可以使用该模版解决 leetcode 39 组合总和 给定一个...

  • 17. Letter Combinations of a Pho

    使用回溯算法

  • 「回溯算法」专题介绍

    「回溯算法」专题介绍 第 1 节:从全排列问题开始理解回溯搜索算法 引言 大家好,今天要和大家分享的主题是“回溯算...

网友评论

      本文标题:2019-11-04 回溯算法

      本文链接:https://www.haomeiwen.com/subject/wgodbctx.html