Report: Triangle Min Path Sum
九章算法的学习DP的经典例子
题目
思路
问题
first trial : TLE
如果使用简单的recursion会出现TLE, 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public class Solution {
/**
* @param triangle: a list of lists of integers.
* @return: An integer, minimum path sum.
*/
public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {
// write your code here
int[] min = new int[]{Integer.MAX_VALUE};
dfs(0, 0, 0, min, triangle);
return min[0];
}
public static void dfs(int x, int y, int sum, int[] min, ArrayList<ArrayList<Integer>> triangle) {
if (x == triangle.size()) {
min[0] = Math.min(min[0], sum);
return;
}
dfs(x+1, y, sum+triangle.get(x).get(y), min, triangle);
dfs(x+1, y+1, sum+triangle.get(x).get(y), min, triangle);
return;
}
}
2nd trial: pass
- 看到这种Divide and Conquer的问题自然想到使用DP解决. 这样可以使用重复计算的部分, 而且避免递归. 注意到: 这是一个找min的值的问题. 自然是DP