题意:给一个数字三角形,每个数字可以向左下或右下相加,求最大的和。
额,看到了就直接dp了。
/**
TASK: numtri
ID: DickensTone
LANG: 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;
}