上图表达的是一个人在工厂上班的任务计划,横坐标代表时间,灰色区域的黑色数字代表任务的编号,红色数字代表完成任务所得到的报酬,并且这个人在同一时间内只能完成一个任务,求这个在这一天工作中所获得的最大报酬。

下面是由题意列出的递归方程:

opt(i)=v(i)+opt(prev(i)) 选择当前的任务

opt(i) = opt(i-1) 不选择当前的任务

上面方程中的opt(i)代表考虑到任务i时所获得的最大报酬,v(i)代表当前任务i所对应的报酬,prev(i)代表当前任务i前面还可以做哪个任务。由图得到了v(i)和prev(i)所对应的数组int[] prev = new int[] {0,0,0,1,0,2,3,5};和

int[] v = new int[] {5,1,8,4,6,3,2,4};所以最后得到了这个递归方程所对应的java代码:

public class ChoiceOrNot {//存储在选择第i个任务时,它前面可以做的任务编号,0表示无任务可做static int[] prev = new int[] {0,0,0,1,0,2,3,5};//存储每个任务所对应的价值static int[] v = new int[] {5,1,8,4,6,3,2,4};//比较两个整数的大小,并返回较大的整数public static int max(int a,int b) {if(a>=b) return a;elsereturn b;}//求做任务可以得到的最大价值(递归法)public static int rec_opt(int i) {if(i<=0)return 0;if(i==1) return v[i-1];int choice = v[i-1] + rec_opt(prev[i-1]);int notChoice = rec_opt(i-1);return max(notChoice,choice);}//求做任务可以得到的最大价值(动态规划法)public static int dp_opt() {int[] opt = new int[v.length+1];opt[0] = 0;opt[1] = v[0];for(int i=1;i<opt.length;i++) {int choice = v[i-1]+opt[prev[i-1]];int notChoice = opt[i-1];opt[i] = max(choice,notChoice);}return opt[opt.length-1];}public static void main(String[] args) {int result1 = rec_opt(8);int result2 = dp_opt();System.out.println(result1);System.out.println(result2);}
}

运行结果为:

动态规划求最大工作价值(java实现)相关推荐

  1. 动态规划求编辑距离 - 残阳似血的博客

    动态规划求编辑距离 - 残阳似血的博客 动态规划求编辑距离 - 残阳似血的博客 动态规划求编辑距离 位于分类 自然语言处理 这两天在写一个简单的单词拼写检查器(Spell checker),本来求编辑 ...

  2. 动态规划-规划兼职工作

    动态规划-规划兼职工作 一.问题描述 你打算利用空闲时间来做兼职工作赚些零花钱.这里有 n 份兼职工作,每份工作预计从 startTime 开始到 endTime 结束,报酬为 profit.给你一份 ...

  3. 帮做Java_求好人帮做Java语言程序设计课件 万谢!急!

    求好人帮做Java语言程序设计课件 万谢!急! 求好人帮做Java语言程序设计课件 万谢!急! <Java语言程序设计> 要求从第1,2题任选一道,从5,6题任选一道.第3,4题必须完成. ...

  4. java 2年11k工资是否辞职_初中学历,从制造业工作转行Java开发,毕业收获月薪11k

    初中学历,从制造业工作转行Java开发,毕业收获月薪11k 时间:2018-08-22     来源:未知 小陈学历不高,来华清学习之前,在制造行业工作了很多年,也当到了车间主任的位置,但是工厂的环境 ...

  5. 求平均气温(Java)

    求平均气温(Java) 代码: 运行结果: 程序首先定义了一系列的变量, count 用来表示第几天, next 用来存放每天的气温, sum用来存放气温的总和,而 average 是用气温的总和除以 ...

  6. 裸辞三个月后,哭诉亲身经历,建议还想换工作的Java程序员不要辞职

    本文转载自:裸辞三个月后,哭诉亲身经历,建议还想换工作的Java程序员不要辞职 有位朋友私信我: 我从事Java工作,今年受了很大的影响,我们公司采取了节源措施,给在岗的每位员工只发底薪.底薪太少了, ...

  7. 旅游路线最短matlab,动态规划求最短旅行路线.doc

    动态规划求最短旅行路线.doc 动态规划求最短旅行路线摘要在我们日常生活和旅行中经常遇到求最短路径的问题,将动态规划思想运用到求解旅行问题最短路径中,将过程划分为几个阶段,在每阶段中选取最优策略,最后 ...

  8. 无限数列求第n项 java

    无限数列求第n项 java 题目描述: 有一个无限长的数字序列:1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,--(数字k在序列中正好出现k次).想知道这个数字序列的第n项是多少? 输入 ...

  9. Java动态规划求最长公共子序列(LCS)

    最长公共子序列(LCS) 定义:在序列X和序列Y中同时出现的元素,按照脚标从小到大排列的这样的序列.         String x = "ABCBDABGGGTT";      ...

  10. 求安慰,找java工作两个多月了

          来深圳一年了,初中毕业.打过工,做过小生意.来到深圳投靠叔叔,本来还想跟他学做石材生意,但市道又不好,自己 又是经历过生意失败,后来想想还是安安分分打份工好了,想到初中毕业什么也不会,又不 ...

最新文章

  1. float js 正则 验证_使用HTML和Vuejs进行表单验证
  2. Java MVC框架性能比较 jsp、struts1、struts2、springmvc3 (转帖)
  3. 报Access数据库不存在或者打不开的错误
  4. pythonweb扫描器_Python安全工具之web目录扫描
  5. python平稳性检验_Python数据分析0.3 用statsmodels进行ADF平稳性检验
  6. 后端技术:Java编程中忽略这些细节,Bug肯定少不了
  7. 程序员面试金典 - 面试题 17.12. BiNode(BST中序遍历)
  8. HTML5物理游戏开发 - 越野山地自行车(三)粉碎自行车
  9. 自制简易JTAG下载烧写工具
  10. EasyDarwin源码分析(二)——rtsp-server、rtsp-session
  11. 如何测量三角形的斜边长度?
  12. Windows UWF 实现系统重启还原(2021.11.02)
  13. 网站弹窗广告html,网站弹窗广告(彻底关闭浏览器的广告弹窗?)
  14. django mysql sql语句_Django中使用mysql数据库并使用原生sql语句操作
  15. 流水线-流水线相关计算
  16. esp-01s接入天猫精灵与relay继电器控制电灯
  17. 你对MySQL中的索引了解多少?
  18. 并发-2-竞争条件例子、锁对象
  19. Python实现json数据清洗、json数据去重、json数据统计
  20. OpenGL ES实现三棱锥纹理贴图

热门文章

  1. Centos6.x安装mysql5.6版本
  2. python中怎么用format居中_python中format函数
  3. 大学计算机基础教程第1章计算机概述总结
  4. js仿百度文库文档上传页面的分类选择器_第二版
  5. ubuntu upgrade problem
  6. 零基础玩转树莓派(六)—遥控小车
  7. 移动端网页字体过多时,字体被自动放大问题
  8. 如何保护眼睛,可采用语音方式获取外界知识,并积极锻炼身体做到劳逸结合。
  9. QGraphicsItem的使用
  10. 《深入学习VMware vSphere 6》——2.2 vSphere 6实验环境需求