问题如下:
给定一个棋盘(由整数列表的列表表示;每个整数代表一个后续点值),大小为n x n,请确定提供最多点数的路径。如果有最佳路径的平局,则返回其中任何一个。
具体要求如下:
A = [[5,4,3,1],[10,2,1,0],[0,1,2,0],[2,3,4,20]]
渲染后显示为:
R1: 5 4 3 1, R2: 10 2 1 0, R3: 0 1 2 0, R4: 2 3 4 20.
规则如下:
你可以从任意一个顶行方块开始移动
你每次只能向下、下左(斜线)或下右(斜线)移动一个方块。
输出必须是一组整数元素。
第一个元素是表示列与行的列表,第二个元素是总点数。例如,对于上面的棋盘,最佳解法是从左上角(5)开始并沿着斜线走到最后的20点方块。这将导致元组([1,2,3,4], 29)
。
请记住,这是在Haskell中进行的,因此它是一个函数式递归问题。起初,我考虑使用贪心算法,即选择r1中的最高值,并通过比较接下来的3种可能性进行递归;选择其中的最高值。然而,贪心算法的缺点是没有看到下一行前面的潜力。
我该怎么做?我并不是在寻找代码,因为我喜欢自己解决问题。但是,伪代码或一些算法指南将非常感激!