zoukankan      html  css  js  c++  java
  • LeetCode 120:三角形最小路径和

    三角形最小路径和

     1 void trianglePrint(int** triangle, int triangleSize, int* triangleColSize){
     2     int i, j;
     3     for (i=0; i<triangleSize; ++i){
     4         for (j=0; j<triangleColSize[i]; ++j){
     5                 printf("%d ", triangle[i][j]);
     6         }
     7         printf("
    ");
     8     }
     9     return ;
    10 }
    11 
    12 int minimumTotal(int** triangle, int triangleSize, int* triangleColSize){
    13     #define MINIMUM(a, b) ((a)>(b)?(b):(a))
    14     #define MAXIMUM(a, b) ((a)<(b)?(b):(a))
    15     int **dp, i, j, k, ret=0, n;
    16     if (triangleSize == 1) {
    17         return triangle[0][0];
    18     }
    19     dp = malloc(sizeof(int*) * triangleSize);
    20     for (i=0; i<triangleSize; ++i){
    21         dp[i] = malloc(sizeof(int) * triangleColSize[i]);
    22         memset(dp[i], 0, sizeof(int) * triangleColSize[i]);
    23     }
    24     
    25     dp[0][0] = triangle[0][0];
    26     dp[1][0] = triangle[1][0] + dp[0][0];
    27     dp[1][1] = triangle[1][1] + dp[0][0];
    28     //trianglePrint(dp, triangleSize, triangleColSize);
    29 
    30     for(i=2; i<triangleSize; ++i) {
    31         dp[i][0] = dp[i-1][0]+triangle[i][0];
    32         
    33         for (j=1; j<triangleColSize[i]-1; ++j){
    34             dp[i][j] = MINIMUM(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
    35         }
    36         
    37         dp[i][triangleColSize[i]-1] = dp[i-1][triangleColSize[i-1]-1] + triangle[i][triangleColSize[i]-1];
    38     }
    39     //trianglePrint(dp, triangleSize, triangleColSize);
    40     i = triangleSize - 1;
    41     ret = dp[i][0];
    42     for (j = 1; j < triangleColSize[i]; ++j){
    43         ret = MINIMUM(ret, dp[i][j]);
    44     }
    45     
    46     //free
    47     for (i=0; i<triangleSize; ++i) {
    48         free(dp[i]);
    49     }
    50     free(dp);
    51     return ret;
    52 }
  • 相关阅读:
    HDU 5795 A Simple Nim ——(Nim博弈 + 打表)
    【Insertion Sorted List】cpp
    【Merge K Sorted Lists】cpp
    【Merge Two Sorted Lists】cpp
    【Merge Sorted Array】cpp
    【Sum Root to Leaf Numbers】cpp
    【Binary Tree Maximum Path Sum】cpp
    【Path Sum II】cpp
    【Path Sum】cpp
    【Maximum Depth of Binary Tree 】cpp
  • 原文地址:https://www.cnblogs.com/micoblog/p/13650316.html
Copyright © 2011-2022 走看看