题目一:求解三角形自上而下路径的最小值
(1)用分治方法来做,
class Solution{
public:
int minimumTotal(vector<vector<int> >& triangle) {
if(triangle.size() <= 0)
return -1;
int result = dfs(0, 0, triangle);
return result;
}
int dfs(int x, int y, vector<vector<int> >& triangle){
int n = triangle.size();
if(x == n)
return 0;
return min(dfs(x+1, y, triangle), dfs(x+1, y+1, triangle)) + triangle[x][y];
}
};
(2)用动态规划来做
难点在于找状态方程。发现从triangle[x][y]出发,那么路径只能是triangle[x][y]—>triangle[x+1][y]或者triangle[x][y]—>triangle[x+1][y+1]。以点(x,y)为参考,则可能的状态为:<