- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试自学动态编程,并在麻省理工学院遇到了这个问题。
给定一个 4 行 n 列的棋盘,并且在每个方格中写有一个整数。我们还得到了一组 2n 个鹅卵石,我们想要将其中的一些或全部放在棋盘上(每个鹅卵石可以正好放在一个方格上)从而最大化被鹅卵石覆盖的正方形中的整数之和。有一个限制条件:要使鹅卵石的放置合法,不能有两个鹅卵石水平放置或垂直相邻的正方形(对角线相邻是可以的)。
(a) 确定任意列中可以出现的合法模式的数量(孤立地,忽略相邻列中的鹅卵石)并描述这些模式。如果两个模式可以放置在相邻的列上以形成合法放置,则称这两个模式兼容。让我们考虑由前 k 列 1 k n 组成的子问题。每个子问题可以被分配一个类型,即最后一列中出现的模式。
(b) 使用兼容性和类型的概念,给出一个 O(n) 时间的动态规划算法来计算最佳放置。
好的,对于 a 部分:有 8 种可能的解决方案。
对于 b 部分,我不确定,但这就是我要去的地方:拆分成子问题。假设我在 n。1. 通过对列 0,...,i 进行拼接,将 Cj[i] 定义为最优值,这样列 i 的模式类型为 j。2. 为每种形态类型创建 8 个包含 n 个元素的独立数组。
我不确定从这里去哪里。我知道网上有解决这个问题的办法,但我觉得解决办法不是很清楚。
最佳答案
您走在正确的轨道上。当您检查每个新列时,您将最终计算到该点的所有可能的最佳分数。
假设您构建了兼容性列表(一个二维数组)并将其命名为 Li[y] 这样对于每个模式 i存在一个或多个兼容模式Li[y]。
现在,您检查 j 列。首先,您为每个模式 i 计算该列的独立分数。称之为Sj[i]。对于每个模式 i 和兼容pattern x = Li[y],你需要最大化总分 Cj 使得 Cj[x] = Cj-1[i] + Sj[x]。这是一个简单的数组测试和更新(如果更大)。
此外,您还存储了导致每个分数的鹅卵石图案。当您更新 Cj[x](即,您将其得分从其当前值增加)时,请记住导致更新为 Pj[x] = i。也就是说,“给定前面的模式 i,模式 x 给出了最好的结果”。
当你全部完成后,只需找到得分最高的模式 i Cn[i]。然后,您可以使用 Pj 回溯,从导致此结果的每一列中恢复鹅卵石图案。
关于python - 用动态规划来拼棋盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18951721/
我正在创建我的第一个 WAR 文件。我一直在试验 ant buildfile 语法,我的 buildfile 的第一部分从我的 Eclipse 项目中获取内容并将其放入 /dist 文件夹中,然后将其
我是一名学习 SQL 和 PHP 的学生,我接到了一项任务,要使用 PHP 和 mySQLi 创建学生反馈表,我真的一直在思考如何为项目设计数据库! 我正在创建一个系统,用户可以在其中登录网页,如果用
这个问题在这里已经有了答案: Is it possbile to test for expected errors when the testee exits with failure using
我目前正在设计和开发一个 Web 应用程序,该应用程序有可能快速增长。我将提供一些一般信息,然后继续我的问题。我会说我是一名中级网络程序员。 以下是一些规范:MySQL - 数据库后端PHP - 用于
我不知何故无法在我的日志解析器应用程序中实现报告功能。 这是我目前所做的: 我正在编写一个应用程序,它读取日志文件并在字符串中搜索可以在用户配置文件中定义的多个正则表达式。对于从配置中解析的每个所谓的
我有兴趣学习如何在多开发团队场景中设计/规划 Web 应用程序开发。 假设“项目经理/负责人”的角色: 成功的 Web 应用程序开发需要哪些“文档”? 需要什么 UML 图,需要什么程度? 在设计/计
table a (t_a): id name last first email state country 0 sklass klass steve
我们建立了一个广泛使用 JQuery UI 的 AJAX 网站。我们有 30 多个自制的 JQuery UI 小部件(动态加载)。我们到处都使用 JQuery native 小部件:对话框、 slid
我是一名优秀的程序员,十分优秀!