[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;
}

  

posted @ 2013-10-01 23:29  阿牧遥  阅读(187)  评论(0编辑  收藏  举报