usaco Number Triangles

来源:互联网 发布:fifaol3数据库手机版 编辑:程序博客网 时间:2024/06/05 19:14

题意:给一个数字三角形,每个数字可以向左下或右下相加,求最大的和。

额,看到了就直接dp了。

/**TASK: numtriID: DickensToneLANG: C++**/#include<iostream>#include<cstdio>#define max(x, y) (x > y ? x : y)const int maxn = 1000 + 5;int dp[maxn][maxn];int main(){    freopen("numtri.in", "r", stdin);    freopen("numtri.out", "w", stdout);    int n;    while(scanf("%d", &n) == 1)    {        int r = 1;        while(r <= n)        {            for(int i = 1; i <= r; i++)            {                scanf("%d", &dp[r][i]);            }            r++;        }        for(int i = n - 1; i >= 1; i--)            for(int j = 1; j <= i ; j++)            {                dp[i][j] += max(dp[i + 1][j],dp[i + 1][j + 1]);            }        printf("%d\n", dp[1][1]);    }    return 0;}