【发布时间】:2018-02-15 08:37:33
【问题描述】:
给定一个大小为 N*N 的方阵,其中每个单元格都与特定的成本相关联。路径被定义为从左上角单元格开始仅向右或向下移动并在右下角单元格结束的特定单元格序列。我们想找到具有最大值的路径。现在让事情变得更有趣:你也有 T 令牌。您可以使用令牌将当前方块上的值加倍。您只能在任何给定的方格上使用一个令牌。
这就是我解决第一部分问题的方法。
public static long pathWithMaxCost(int[][] n, int tokens) {
int[][] arr = new int[n.length][n[0].length];
// starting position
arr[arr.length - 1][0] = n[arr.length - 1][0];
// first column
for (int i = arr.length - 2; i >= 0; i--) {
arr[i][0] = arr[i + 1][0] + n[i][0];
}
// last row
for (int i = 1; i < arr[0].length; i++) {
arr[arr.length - 1][i] = arr[arr.length - 1][i - 1] + n[arr.length - 1][i];
}
for (int i = arr.length - 2; i >= 0; i--) {
for (int j = 1; j < arr[0].length; j++) {
arr[i][j] = Math.max(arr[i][j - 1], arr[i + 1][j]) + n[i][j];
}
}
return arr[0][arr[0].length - 1];
}
现在怎么处理token部分,T平方值可以翻倍?
【问题讨论】:
标签: java recursion dynamic-programming