题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084
#include <iostream>
#include <string.h>
using namespace std;
/****************************************************************************************************************
思路:没什么说的了,最简单的dp,刚接触的时候和别难理解,现在好多了
重点在于:
1,优化子问题
2,状态转移方程
3,状态更新
理解了这几步相信简单的dp不在话下了,难一点的,咳!要会列方程
****************************************************************************************************************/
int dp[105][105];
int main()
{
int T,N,a[105][105];
cin>>T;
while(T--)
{
memset(dp,0,sizeof(dp));
memset(a,0,sizeof(a));
cin>>N;
for(int i = 1;i <= N;i ++)
for(int j = 1;j <= i;j ++)
cin>>a[i][j];
for(int i = N;i > 0;i --)
for(int j = 1;j <= i;j ++)
dp[i][j]=a[i][j]+max(dp[i+1][j],dp[i+1][j+1]);
cout<<dp[1][1]<<endl;
}
return 0;
}