[wikioi]数字三角形

http://wikioi.com/problem/1220/

最基本经典的DP题目,唯一有点意思的是,自底向上计算会更简洁。另外对这种+方式累计的DP,可以直接把原来的存进去,然后再加,本质是不用在同一步更新,因为没有更复杂的运算,只是叠加而已。

#include <stdio.h>

int dp[101][101];

int Max(int x, int y)

{

    return x > y ? x : y;

}

int main()

{

    int n;

    scanf("%d", &n);

    for (int i = 1; i <= n; i++)

    {

        for (int j = 1; j <= i; j++)

        {

            scanf("%d", &dp[i][j]);

        }

    }

    for (int i = n; i >= 2; i--)

    {

        for (int j = 1; j < i; j++)

        {

            dp[i-1][j] += Max(dp[i][j], dp[i][j+1]);

        }

    }

    printf("%d\n", dp[1][1]); 

    return 0;

}

  

你可能感兴趣的:(IO)