2014/9/15
连数塔都差点写不出来。
这世上只有你拥有了相应的实力,才会有相应的圈子。
//Ñô¹â´ÌÍ´Ë«íø
//gou
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
#include<stack>
#include<map>
#include<climits>
#include<vector>
using namespace std;
typedef long long ll;
#define f(x,y,i) for(int i = x;i < y; i++)
#define ff(x,y,i) for(int i = x;i <= y; i++)
#define F(x,y,i) for(int i = x; i >= y; i--)
#define FF(x,y,i) for(int i = x; i > y; i++)
#define lson pos<<1,l,mid
#define rson pos<<1|1,mid+1,r
#define Min(x,y) x<y?x:y
#define Max(x,y) x>y?x:y
#define sc(n) scanf("%d",&n)
#define pr(n) printf("%d\n",n)
#define met(n,m) memset(n, m, sizeof(n))
#define mod 10007
const int N=150;
int s[N][N];
int n , m , d,tot , a , b , maxn;
void init()
{
for(int i =0 ;i < N; i++)
for(int j =0;j< N; j++)
s[i][j]=0;
}
int main()
{
while(~scanf("%d",&tot))
{
while(tot--)
{
maxn = 0;
scanf("%d",&n);
init();
for(int i = 1;i <= n; i++)
for(int j = 1;j <= i; j++)
scanf("%d",&s[i][j]);
for(int i = 1;i <= n; i++)
{
s[i][1]+=s[i-1][1];
s[i][i]+=s[i-1][i-1];
}
/*
for(int i = 1;i <= n; i++)
{
for(int j =1;j <= i; j++)
printf("%d ",s[i][j]);
printf("\n");
}*/
for(int i =3;i <= n; i++)
{
for(int j= 2;j < i; j++)
s[i][j]+=Max(s[i-1][j-1],s[i-1][j]);
}
/*
for(int i = 1;i <= n; i++)
{
for(int j =1;j <= i; j++)
printf("%d ",s[i][j]);
printf("\n");
}*/
for(int i =1;i<=n ;i++)
maxn=Max(maxn,s[n][i]);
printf("%d\n",maxn);
}
}
return 0;
}