- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
任务定义:
我有一个自然数矩阵。任务是找到从矩阵左上角到矩阵右下角的路径并拨出最大分数。导航规则:如果您位于 [i][j],您可以移动:a) 到 [i][j-1], [i][j+1], [i+1][j] 个单元格并拨零点b) 向[i+1][j+1]拨矩阵[i][j]点
小例子:
假设您有50分
和矩阵
0 3 5 3 2
4 7 2 5 2
4 3 5 2 5
假设您在 [1][1] 个单元格中(矩阵 [1][1] = 7)。您可以导航到:
a) [1][0] cell with 50 score
b) [1][2] cell with 50 score
c) [2][1] cell with 50 score
d) [2][2] cell with 57 score
什么问题:
我以非常缓慢的方式解决这个任务...
我尝试在递归的帮助下实现。如果您只想找到最高分,这很容易。有点像
public int loop(int i, int j) {
int left = loop(i, j-1);
int top = loop(i-1, j);
int diagonal = loop(i-1,j-1) + matrix[i-1][j-1];
return maximum(left, top, diagonal);
}
但是,我想找到得分最高的路径!而且它非常耗时/内存。
为什么会耗费时间/内存:
还有一个问题:我需要存储路径集合并将其作为参数传递给循环方法。但是循环方法在每次迭代时 fork ,我必须在迭代时复制路径集合。否则,每个循环分支都会修改公共(public)路径集合,最后我将在其中包含所有可能的路径。我的意思是,如果在 left
、top
和 diagonal
之间,最大的是 left
,我们不能包含链接的路径顶部
和对角线
。
问题:
如何正确解决?
编辑:
其实不需要找全路径。它只需要找到你拨分数的点(你在其中进行对角线移动)
最佳答案
为此您不需要动态规划或暴力破解!
要了解原因,让我们分析一下规则:
j
方向上自由移动(左和右),因此没有理由要小心那个方向 - 您可以随时移动到最佳水平位置。i
(向下)就没有回头路了(尽管您可以增加i
而不会获得分数)。 i
的每次增加都应该获得最大的点数。j
位置,然后对角线走一步;重复直到完成。i
步骤是从具有最高值的行中的非最后一个单元格开始移动。您不能从最后一个单元格移动,因为不可能进行对角线移动 - 因此,如果您的矩阵只有一列(或一行),您将永远不会获得积分。您不会失分,因为这些值是自然数(但如果允许负数,您仍然可以跳过一行)。更详细地说,然后通过...找到最佳路径
就是这样!
请注意,可能存在多个最大路径,您的问题说明并不能保证唯一的解决方案。
编辑:如果您不需要实际路径,而只需要您得分的数字,则该算法会简单得多 - 删除或忽略最后一行和最后一列,然后对于每个 i
(行)返回该行中的最大值。
关于algorithm - 有趣的谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670265/
文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好10
我有一个工具按钮和一个分配给它的操作。但该操作没有点击事件,也没有点击代码。因此该按钮被禁用,如何将其更改为启用? 谢谢! 最佳答案 当某个操作没有 OnExecute 处理程序时,该操作始终处于禁用
我有一个 C 程序,它初始化两个结构并尝试打印它们的值。请参阅下面的代码。 #include #include typedef struct node{ int data; struc
我在回答 this question当我想到这个例子时: #include void func(int i); void func(); int main (){ func(); r
这些bug可能够你喝一壶的。 1、被断言(assert)包含的代码 常发生在切换到release版本时,执行结果乖乖的,最终查找结果是assert括号里的代码在release下是不执行的。
我正在谈论一个独立的对象,稍后我想使用 saveOrUpdate() 进行更新。 我们如何同时设置 null 和clear()引用的集合? A[1:1]B[1:M]C B 到 C 的引用可以为空,这意
我最近完成了 Marjin Haverbeke 的书“Eloquent Javascript, Second Edition”中的一项挑战。 One had to create此控制台输出使用 for
我写了一个 HtmlHelper 表达式,我花了很多时间将标题标签放入我的下拉列表中,如下所示: public static HtmlString SelectFor( thi
你知道有哪些开放的软件项目有特别有趣/写得很好的单元测试吗? 编写单元测试对我来说通常感觉很奇怪,因为它似乎太随机、太密集、太稀疏,……阅读一些现实世界的例子(而不是书籍、图书馆示例代码等)会很棒。
我有一个我目前正在使用的 Silverlight 应用程序,它为其 MVVM 框架实现了 Caliburn.Micro。一切正常,但我注意到一些绑定(bind)中的一些有趣之处。我拥有的是处理应用程序
我通过 swscale 运行 png 图像数据以获取 YUV420P 数据,然后使用 MSMPEG4V1 编解码器对该帧进行编码,从而在 iPhone 上对一些视频进行编码。在 api 文档中,avc
我写了一个页面,发现 addEventListener("loadedmetadata",fun) 在 firefox 上运行不正确 我正在尝试修复一个旧软件的错误。在加载视频和页面时,该软件尝试在页
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一名优秀的程序员,十分优秀!