动态规划:国王与金矿

国王的金矿:01背包问题 动态规划解法 国王的金矿:01背包问题 动态规划解法 题目描述 有一个国家发现了 n 座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。 参与挖矿工人的总数是 m 人。 每座金矿要么全挖, 要么不挖,不能派出一半人挖取一半金矿。 要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 输入输出 第一行输入两个整数 n,m表示有n座矿,m个人可用,接下来n行,每行输入两个整数value,co... 阅读详情
题目(来源)

有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?


递归实现
public static void main(String[] args) {
 int[] p = new int[]{3, 4, 3, 5, 5};
    int[] g = new int[]{200, 300, 350, 400, 500};
    int gold = new Main().maxGold(5, 10, p, g);
    System.out.println(gold);
}

public int maxGold(int n, int w, int[] p, int[] g) {
    if (n == 1) {
        return w < p[n - 1] ? 0 : g[n - 1];
    }
    if (w < p[n - 1]) {
        return maxGold(n - 1, w, p, g);
    }
    return Math.max(maxGold(n - 1, w, p, g), maxGold(n - 1, w - p[n - 1], p, g) + g[n - 1]);
}
动态规划
/**
* @param n 金矿数量
* @param w 工人数量
* @param p 第n个金矿需要工人数量
* @param g 第n个金矿金子数量
* @return void
* @Description 采用动态规划获取w个工人从n个金矿中能挖到的最大金子数量
**/
public void getMaxGold(int n, int w, int[] p, int[] g) {
    int[] preResult = new int[w];
    int[] result = new int[w];

    for (int i = 0; i < w; i++) {
        if (i+1 < p[0]) {
            preResult[i] = 0;
        } else {
            preResult[i] = g[0];
        }
    }

    for (int i = 1; i < n; i++) {
        for (int j = 0; j < w; j++) {

            if (j+1 < p[i] ) {
                result[j] = preResult[j];
            }else if(j+1 == p[i]){
                result[j] = Math.max(preResult[j], preResult[j-p[i]+1] + g[i]);
            } else {
                result[j] = Math.max(preResult[j], preResult[j - p[i]] + g[i]);
            }
        }
        show(result);
        preResult = result.clone();
    }
}

public void show(int[] array){
    for(int i:array){
        System.out.print(i+" ");
    }
    System.out.println();
}

两种方法的选择应根据实际情况,如果例子中金矿数不变,而工人数变为10000,动态规划效果不及简单递归。

国王的金矿:动态规划中 “01背包问题” 的空间优化 国王的金矿:动态规划中 “01背包问题” 的空间优化 上一篇:国王的金矿 经典解法,使用二维数组 https://blog.youkuaiyun.com/weixin_44176696/article/details/104063272 观察经典状态转移方程 根据刻在DNA里的状态转移方程: // cost[x] / value[x] 表示开第x座矿的需要的人手,价值 dp[i][j] = max(dp[i-... 阅读详情

相关推荐

Leetcode动态规划详解(二)

接下来我们根据一个动态规划的中等题来讲解 """动态规划之国王和金矿 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。 参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。 要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 动态规划的三个重要概念: 最优子结构、边界、状态转移公式 f(8)和f(9)是f(10)的最优子结构(f(8) + f(9) = f(10)) f(1)、f(2)是问题的边界,不需要计算的. f(n) =

you are sherlocked by me! 642

20170801_动态规划之国王和金矿

动态规划之国王和金矿

风暴计划 2803

【动态规划之“0-1背包问题”----国王和金矿问题----C++实现】

目录问题描述(1)国王和金矿代码(1)输出(1)问题描述(2)0-1背包问题代码(2)输出(2)0-1背包 简化代码:输出: 问题描述(1)国王和金矿 描述:有一个国家发现了max_n座金矿,参与挖矿工人的总数是max_people人。每座金矿的黄金储量不同为一维数组gold[],需要参与挖掘的工人数也不同为一维数组peopleNeed[]。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 代码(1) #include <bits/stdc+

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 806

动态规划算法入门基础(爬楼梯、国王与金矿)

1. 动态规划算法 题目描述:每次可以爬1个或2个台阶,问爬到第 n 个台阶,一共有多少种不同的方法。 动态规划中包含三个重要的概念:最优子结构、边界、状态转移公式 最优子结构是状态转移方程的的一个特例,状态转移公式是可以套用的 F(1)=1; //边界 F(2)=2; //边界 F(n)=F(n-1)+F(n-2) (n&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;=3); //状态转移方程,里面的n就是状态 F(10)...

越丘的博客 643

国王和金矿问题.rar

本资源是一个关于 “国王和金矿问题”的 动态规划问题,C++源代码,需要的朋友可以去下载哦

从零构建NVENC编码器:一个游戏开发者的实战手册

本文详细介绍了如何从零构建NVENC编码器,特别针对游戏开发者提供实战指南。内容涵盖NVENC基础概念、DirectX纹理捕获、异步编码优化及高级特性配置,帮助开发者高效集成硬件编码技术到游戏引擎中,实现高性能游戏录制和直播功能。重点解析了NVIDIA专用编码芯片的优势与API使用技巧。

weixin_29292431的博客 365

动态规划学习-【国王和金矿】

微信公众号 题目: 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 方法一:排列组合 每一座金矿都有挖与不挖两种选择,如果有N座金矿,排列组合起来就有2^N种选择。对所有可能性做遍历,排除那些使用工人数超...

Microstrong 1万+

PAT|中国大学MOOC-浙江大学翁恺-C语言程序设计习题集(更新中)

##2-0. 整数四则运算 时间限制:400 ms 内存限制:65536 kB 代码长度限制:8000 B 判题程序:Standard 作者:乔林(清华大学) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 ...

小鱼波波波 6万+

动态规划 入门一

对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢! ----第一节----初识...

ooaer的专栏 788

SAP S/4HANA 物料分类账(ML)/实际成本核算(Actual Costing)——底表全景 & CKMLCP 执行后数据变化

插入 ML 重估凭证行项目:Dr/Cr 库存科目(期末库存调整)、Dr/Cr COGS/消耗科目(消耗重估)、Cr/Dr ML 重估抵消科目(PRY/PRV 类逻辑)also STPRS/VERPR/PEINH/LBKUM 等(但 S/4 很多“真理”在 ACDOCA)MLPP / MLPPF / MLCR / MLCRF / MLCD / CKMLMV003/004 等。Material Ledger Document(行项目明细:收货/发票价差/结算写入/重估相关)间接(PUP在CKMLCR;

weixin_52203666的博客 577

【LaTeX PPT模板集】Beamer主题与配色使用教程

【LaTeX PPT模板集】Beamer主题与配色使用教程

Xminyang的博客 1万+

动态规划入门之国王的金矿

最近学习算法,对动态规划不太了解,使用的时候照搬转移方程式,知其然不知其所以然,今天看到一篇动态规划的教程,解释得非常通俗,原文在这里[动态规划入门教程] (http://blog.youkuaiyun.com/woshioosm/article/details/7438834),下面我用自己的记忆和理解讲讲我对动态规划的一点小心得。 首先,动态规划方法适合的题型4个基本特点是: 1、最优子结构,当前一

hhhzua的专栏 7738

Springboot计算机毕业设计校园树洞微信小程序【附源码】开题+论文+mysql+程序+部署

因此,开发一款专门针对校园用户的树洞微信小程序,为学生提供一个安全、私密、便捷的倾诉和交流平台,具有重要的现实意义和应用价值。通过本研究的实施,我们预期能够开发出一款功能全面、操作便捷的校园树洞微信小程序,为校园师生提供一个安全、私密、便捷的倾诉和交流平台。此外,通过不断优化和改进小程序的功能和服务,我们预期能够提升用户体验和满意度,推动校园树洞小程序的持续发展,并为校园生活的和谐与健康发展做出积极贡献。同时,通过不断优化小程序的功能和服务,提升用户体验和满意度,推动校园树洞小程序的广泛应用和持续发展。

光冯毕设程序 1666

看动画轻松理解「递归」与「动态规划」

在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知识点。 程序员小吴打算使用动画的形式来帮助理解「递归」,然后通过「递归」的概念延伸至理解「动态规划」算法思想。 什么是递归 先下定义:递归算法是一种直接或者间接调用自身函数或者方法的算法。 通俗来说,递归算法的实质是把问题分解成规模缩小的同类问题...

程序员吴师兄的博客 8332

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

官网:www.SZLCSC.COM以芯片为例器件类——>芯片类——>对应芯片确定芯片——>数据手册1:原理图2:PCB3:打开操作流程选中原理图——>文件——>导出——>AD1: ✔2:导出AD文件操作流程选中PCB图——>文件——>导出——>AD1: ✔2:导出AD文件1:PCB图2:原理图操作流程文件——>打开操作流程选中文件——>打开操作流程项目文件——>添加新的...到工程——>Schematic Library新原理图库操作流程项目文件——>添加新的...到工程——>PCB Library新的PC

XU157303764的博客 5435

Vue3 - 详细实现移动端H5网页调用摄像头拍照功能,微信公众号网页h5页面打开本地摄像头并点击按钮照相,vue3获取摄像头画面执行拍照保存,调整摄像头前置后置抓拍图片给用户展示或保存手机上传服务器

vue3,H5网页,手机移动端,vue3摄像头拍照,前端h5调用手机摄像头,移动端网页调用摄像头,H5实现手机拍照和选择上传,调用本地摄像头实现拍照,vue3调用摄像头拍照,手机浏览器开启摄像头并进行拍照,H5移动端网页中调用手机摄像头,H5实现web调用摄像头在线照相,vue3h5调用摄像头,微信公众号网页如何调用摄像头拍照,公众号H5页面实现打开摄像头照相,怎么生成临时图片,vue3项目调用摄像头实现拍照功能,摄像头打不开没反应,浏览器不兼容怎么办,摄像头权限不弹出,只能在本地运行,拒绝权限后怎么办,

🏆 前端领域优质创作者 1万+

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)

Java仗剑走天涯 1万+

从零搭建实时数仓:基于Flink+ClickHouse的实践

实时数据处理和实时数据查询。市场上的技术方案众多,为何选择Flink+ClickHouse?

AIGC应用创新大全的博客 1320

动态规划

动态规划中包含三个重要概念:最优子结构、边界、状态转移公式。 题目一:上台阶问题: (1)问题建模: F(10)=F(9)+F(8); F(9)和F(8)是F(10)的最优子结构; F(1)和F(2)是问题的边界,如果一个问题没有边界将永远无法得到有限的结果。 F(n)=F(n-1)+F(n-2)是阶段与阶段之间的【状态转移方程】。这是动态规划的核心,决定了问题的每一个阶段和下一阶段的关系。 (2...

weixin_41675900的博客 361

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

动态规划(解析国王与挖矿问题)

动态规划包含三个重要概念: 最优子结构 边界  状态转移公式   例题1:爬楼梯问题 or 斐波拉契数列(单维度动态规划 相对容易) 例题2:国王和金矿 (双维度动态规划) 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖...

记录求学阶段的技术学习、项目实践与成长思考。 3817

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【动态规划模型】金矿模型理解动态规划!(精彩的故事)

      对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!         -...

xuanweiace的博客 313

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

动态规划(二)

本文同样参考自 http://baijiahao.baidu.com/s?id=1570689459307346&amp;amp;wfr=spider&amp;amp;for=pc 代码部分自己做了实现。 2. 国王和金矿 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要...

范范123的博客 829
上一篇: ArrayList源码分析
下一篇: 动态规划:连续子数组的最大和
HamalAlpha
博客等级 码龄11年 5粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值