dynamic-programming - 具有最大项的组合变体
问题描述
我正在尝试解决这个问题 Q5。 https://utdallas.edu/~kyle.fox/courses/cs4349fa17/final.pdf 我认为它是寻找具有最大零件数量的作品的一种变体。产生最优解(a)部分的答案的 dp 是
for each square:
for each move:
dp[squareno][moveno]=0
for each move:
dp[square][moveno]=1+min(dp[squareno+moveno][move])
复杂度是 theta(4*4*n) 其中 n 是平方数。如果您查看解决方案并提出一些更改以使其正确,我将不胜感激。
解决方案
不需要额外的状态move
。目标也是最大化。
游戏的目标是在游戏结束前尽可能多地移动。
伪代码:
dp[i]
将是“从正方形 ith 穿过正方形行最右端的最大移动量”。-1
万一不能穿越。
for square n..1:
dp[i] = -1
for all val in square i:
if square+val > n:
dp[i] = max(dp[i], 1)
continue
if dp[i+val] == -1:
continue
dp[i] = max(dp[i], 1 + dp[i+val])
推荐阅读
- powershell - 如何在 Power shell 的文本框中按 Enter 键?
- python - python中意外的多个运算符行为
- tensorflow - 如何在 estimator.train 的每个步骤之间运行张量流操作
- xml - 删除保留子节点的 XML 父节点(ReportSections 和 ReportSection)
- sql - 在火花流中加入大数据
- c++ - 我可以同时使用 SO_REUSEADDR 和 SO_EXCLUSIVEADDRUSE 选项吗?
- python-3.x - 有没有办法在 python 中只获取字典的第一个键?
- git - 如何在 Visual Studio 2017 中完全删除或禁用版本控制集成
- mongodb - MongoDB 多对多关系
- node.js - 设置时区,仍然得到错误的日期