昨天,我的一位朋友遇到了问题,请我找到解决方案。
问题
我有一个matrix(n x m)。我需要找出最小的总和,我可以从这些矩阵元素中产生什么。
matrix(n x m)
条件是:
经过几个小时的努力,我能够找到一个模式。但是我不知道如何在代码中实现它。
这是我的模式:
我该如何实施?
编辑:
$Cost = array(); for ($x = 0; $x < $rows; $x++) { $Cost[0][$x] = $matrix[0][$x]; for ($y = 1; $y < $cols; $y++) { $Cost[$y][0] = $matrix[$y][0]; } } for ($x = 1; $x < $rows; $x++) { for ($y = 1; $y < $cols; $y++) { $Cost[$x][$y] = intval($matrix[$x][$y]) + min(intval($Cost[$x - 1][$y]), intval($Cost[$x][$y - 1])); } }
我正在尝试的矩阵数组:
array(2) { [0]=> array(3) { [0]=> string(1) "3" [1]=> string(2) "44" [2]=> string(2) "75" } [1]=> array(3) { [0]=> string(2) "21" [1]=> string(2) "98" [2]=> string(2) "60" } }
结果:
array(3) { [0]=> array(2) { [0]=> string(1) "3" [1]=> string(2) "44" } [1]=> array(3) { [0]=> string(2) "21" [1]=> int(119) [2]=> int(0) } [2]=> array(1) { [0]=> NULL } }
看来您只能沿左右方向行驶。对于这种情况 (否则使用路径查找算法) 请注意,您可以从上一个单元格或左一个单元格进入每个单元格。从这些值到此单元的最便宜的路径将是最小的。因此,DP解决方案可能看起来像(伪代码):
在这里查看更正
Cost[0, 0] = matrix[0, 0] for x = 1 to cols - 1 Cost[0, x] = matrix[0, x] + Cost[0, x-1] //0th row for y = 1 to rows - 1 Cost[y, 0] = matrix[y, 0] + Cost[y-1, 0] //0th column //proper filling of 0th row and 0th column for y = 1 to rows - 1 for x = 1 to cols - 1 Cost[y, x] = matrix[y, x] + Min(Cost[y-1, x], Cost[y, x-1])
然后您需要Cost [n-1,n-1]