http://poj.org/problem?id=1163
初始化dp[i][j]=f[i][j],然后将下一次运算时加上max(f[i-1][j],f[i-1][j-1])
动态方程为dp[i][j]=f[i][j]+max(f[i-1][j],f[i-1][j-1]).
#include<iostream>
#include<cstdio>
using namespace std;
int f[101][101],dp[101][101];
int main()
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=i; j++)
cin>>f[i][j];
dp[1][1]=f[1][1];
for(int i=2; i<=n; i++)
{
for(int j=1; j<=i; j++)
{
dp[i][j]=f[i][j];
dp[i][j]+=max(dp[i-1][j],dp[i-1][j-1]);
}
}
int res=-1;
for(int i=1; i<=n; i++)
res=max(res,dp[n][i]);
cout<<res;
}