题目

源地址:

http://poj.org/problem?id=1163

理解

这是第一道关于DP的题目,据说是用暴力的方法会直接超时,因为有大量的重复计算。使用DP可以避免这一点,最关键的公式是 triangle[i][j] += max(triangle[i + 1][j] : triangle[i + 1][j + 1])

代码

#include<stdio.h>
#define MAX 100

int triangle[MAX][MAX];

int main()
{
    int n, i, j;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        for (j = 0; j <= i; j++)
            scanf("%d", triangle[i] + j);
    for (i = n - 2; i >= 0; i--)
        for (j = 0; j <= i; j++)
            triangle[i][j] += triangle[i + 1][j] > triangle[i + 1][j + 1] ? triangle[i + 1][j] : triangle[i + 1][j + 1];
    printf("%d\n", triangle[0][0]);
    return 0;
}

更新日志

  • 2014年07月22日 已AC。