转载问题
http://www.cnblogs.com/moqitianliang/p/4798882.html
简要 概括动态规划 就是求原子问题,把一个问题分解成一个原子问题。
二维数组的简单 dp
先把横和竖 的也就是 左边和上面的累加和求出来 中间部分用从上一步递推的思想
求出数组 数组的右下方的一个值就是了。
public class Solution {
public int min(int a,int b){ return ((a)<(b)?(a):(b)); }
public int minPathSum(int[][] grid) {
int i,j,m,n;
int [][] dp = new int[100][100];
n = grid.length;
m = grid[0].length;
dp[0][0]=grid[0][0];
for(i = 1;i<m;i++){
dp[0][i] = dp[0][i-1]+grid[0][i];//横
}
for(j = 1;j<n;j++){
dp[j][0] = dp[j-1][0]+grid[j][0];//纵
}
for(i=1;i<n;i++)
for(j=1;j<m;j++){ //中间部分的计算
dp[i][j] = min(dp[i-1][j]+grid[i][j],dp[i][j-1]+grid[i][j]);
}
return dp[n-1][m-1];
}
}
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》