#include<iostream> #include<cstring> #include<math.h> using namespace std; int main(){ int t,n; scanf("%d",&t); for(int j=0;j<t;j++ ) { scanf("%d",&n); int l=(1+n)*n/2; int num[l]; for(int i=0;i<l;i++) scanf("%d",&num[i]); int count=0; n--; for(int i=l-n-2;i>=0;i--)//倒数第二层开始更新 { //下一层左右数字大的加上该层的数字 num[i]=num[i]+(num[i+n+1]>num[i+n]?num[i+n+1]:num[i+n]); count++; //cout<<"max"<<i<<" "<<n<<" "<<num[i]<<endl; if(count==n)//一行更新结束 { n--; count=0; } } printf("%d\n",num[0]); } return 0; } |
Double click to view unformatted code.