dynamic-programming - 动态规划的递归关系以获得最大学分
问题描述
我的问题是我有固定的时间,我必须获得最高的利润。
如何为动态程序编写递归关系?
我的问题的一个例子:
时间是[3, 2, 4, 2, 1]
利润是[20, 15, 20, 25, 20]
要求的时间是6
答案应该是选择有利润65
的指数的时间。0,3,4
20 + 25 + 20 = 65
解决方案
让我们定义一个函数,该函数f(i,h)
从具有索引(0,1,2...,i)的利润中精确地给出 h 小时的最大利润,那么您的案例的结果是f(size_of_the_array , number_of_hours) = f(5,6)
。
主要的递归公式将如下所示:
f(i,h) = max(w1,w2);
w1 = f(i-1,h); //don't consider the i-th profit in the sum
w2 = f(i-1,h-time[i]) + profit[i]; : h>=time[i] //consider the i-th profit in the sum
这类似于动态规划中称为0-1Knapsack的标准问题
你可以先研究它,然后你的问题就会很容易解决。
推荐阅读
- javascript - 在不同的域中设置 localStorage
- javascript - Javascript:在 Chrome 和 Firefox 中解析 unicode 字符串会产生不同的结果
- javascript - 我试图在向该对象添加新属性之前将对象推送到数组,但它直接更新数组
- css - 主容器上带有 flexgrow 的水平可滚动 div
- flutter - 如何在flutter中从JSON文件中获取数据
- linux - 如何在bash编程中的循环内对文件使用stat
- swift - 我可以将 Swift 包管理器限制在特定平台上吗?
- postgresql - 如何从其他服务器的 dblink 连接?
- json - 使用下拉列表中的数据在 Node-red 上的 SNMP-set 中设置值
- css - 如何在 ant-design 组件中使用 css-in-js?