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
", dp[1][1]);
return 0;
}