hihocoder-1037-数字三角形

dp的简单题,但是我们不能用dfs写,因为100,搜索太慢了,所以我们就从下往上更新每块的值,让它加上正下方或者斜下方的最大值即可。

#include <cstdio>
#include <cstring>
using namespace std;
int dp[105][105];

int max(int a,int b) {
    return a > b ? a : b;
}

int main()
{
    int n;
    scanf("%d", &n);
    memset(dp, 0, sizeof(dp));
    for (int i = 0; i < n;i++)
        for (int j = 0; j <= i;j++)
            scanf("%d", &dp[i][j]);
    for (int i = n-2; i >= 0;i--) {
        for (int j = n-2; j >= 0;j--) {
            dp[i][j] += max(dp[i + 1][j], dp[i + 1][j + 1]);
        }
    }
    printf("%d\n", dp[0][0]);
    return 0;
}
posted @ 2019-02-08 16:06  xyee  阅读(129)  评论(0)    收藏  举报