转载问题

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];
   
    }
}
posted on 2016-10-26 14:50  HDU李少帅  阅读(221)  评论(0编辑  收藏  举报