动态规划经典例题-国王的金矿问题

金矿问题

问题概述:
有一位国王拥有5座金矿,每座金矿的黄金储量不同,
需要参与挖掘的工人人数也不同。例如有的金矿储量是500kg黄金,需 要5个工人来挖掘;有的金矿储量是200kg黄金,需要3个工人来挖 掘…… 如果参与挖矿的工人的总数是10。每座金矿要么全挖,要么不挖,不能 派出一半人挖取一半的金矿。要求用程序求出,要想得到尽可能多的黄 金,应该选择挖取哪几座金矿?
什么是动态规划:
动态规划:将复杂问题简化为规模较小的子问题,再从简单的子问题自底向上一步一步递推,最终得到复杂问题的最优解
思路:
利用动态规划思想将大问题拆分为一个个小问题,之后一步一步解决问题
例:
在这里插入图片描述
如此直至人数为0或者剩余金矿数为0,也就是问题的边界
之后自底向上就可以从小问题的最优解求出整体的最优解,使利益最大化
具体解释与步骤详情参考代码

package algorithm;

/**
 * 动态规划金矿问题
 * 如何在已有人数和金矿收益情况下获得最大的淘金收益
 *  动态规划:将复杂问题简化为规模较小的子问题,
 *      再从简单的子问题自底向上一步一步递推,最终得到复杂问题的最优解
 *  动态规划的要点:
 *      确定全局最优解与最优子结构间的关系
 *      确定问题的边界
 */
public class GoldMining {
   
    public static void main(String[] args) {
   
        int w = 10;
        int[] p = {
   5,5,3,4,3};
        int[] g = {
   400,500,200,300,350};
        System.out.println("最优收益为:"+getBestGoldMining(g.length,w,p,g));
        System.out.println(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值