120 triange

2017-12-05  本文已影响0人  larrymusk
/*

区别于自顶向下,另一种更简单的做法就是自底向上了。dp方程为
dp[m][n] = min(dp[m + 1][n], dp[m + 1][n + 1]) + triangle[m][n]
我们仍然可以使用一位数组滚动计算。
*/
#define min(a,b) (a<b?a:b)
int minimumTotal(int** triangle, int triangleRowSize, int *triangleColSizes) {

    int *dp = calloc(triangleColSizes[triangleRowSize-1],sizeof(int));
    
    int mintotal ;
    //dp[0] = triangle[0][0];
    for(int i = 0;  i <triangleColSizes[triangleRowSize-1]; i++)
        dp[i] = triangle[triangleRowSize-1][i];

    for(int i = triangleRowSize-2; i >=0; i--)
        for(int j = 0; j < triangleColSizes[i]; j++)
            dp[j] = min(dp[j],dp[j+1])+triangle[i][j];


    return dp[0];       
        
}

上一篇下一篇

猜你喜欢

热点阅读