一、题目描述
小明每周上班都会拿着自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时长(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和。那么请你帮小明安排一下工作,保证小明在指定的工作时间内完成工作收入最大化。
二、输入描述
输入的第一行为两个正整数T,n。
T代表工作时长(单位h,0 < T <100000),n代表工作数量(0 < n <= 3000)。
接下来是n行,每行包含两个整数t,w。
t代表该项工作消耗的时长(单位h,t > 0),w代表该项工作的报酬。
三、输出描述
输出小明指定工作时长内可获得的最大报酬。
四、动态规划
看到题目,我的第一反应是采用动态规划求解,目标值是雨花石重量总和的一半,从当前雨花石中最少拿出几块,满足两人的雨花石均分。
先区分一下动态规划与分治方法,都是将原问题拆分成若干个子问题,分别求解,再组合子问题的结果选出最优解。
分治方法将问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。
动态规划应用与子问题重叠的情况,即不同的子问题具有公共的子子问题(子问题的求解是递归进行的,将其划分为更小的子子问题),在这种情况下,分治方法会做许多不必要的工作,他会反复求解那些公共子子问题。
而动态规划对于每一个子子问题只求解一次,将其解保存在一个表格里面,从而无需每次求解一个子子问题时都重新计算,避免了
这篇博客介绍了如何运用动态规划解决华为OD机试中关于工作安排的问题。博主详细阐述了题目的背景,输入和输出描述,并解释了动态规划与分治方法的区别。解题思路包括读取输入、创建工作数组、使用动态规划更新二维数组,最后输出最大报酬。提供的Java算法源码和效果展示进一步辅助理解解题过程。
订阅专栏 解锁全文
3707

被折叠的 条评论
为什么被折叠?



