View Code of Problem 65

#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.


Back to problem 65