搜索——数塔问题

问题 D: 数塔问题

时间限制: 1 Sec  内存限制: 128 MB
提交: 281  解决: 242
[提交][状态][讨论版][命题人:quanxing]

题目描述

有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 

输入

输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 20),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。 

输出

对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。 

样例输入

1 5 9 12 15 10 6 8 2 18 9 5 19 7 10 4 16

样例输出

59
#include<cstring>
#include<cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int c,n,a[20][20],maxnum;
void search(int x,int y,int sum)
{
	if(x>=n||y>=n)
	{
		if(sum>maxnum)
		maxnum=sum;
        return;
	}
	search(x+1,y,sum+a[x+1][y]);
	search(x+1,y+1,sum+a[x+1][y+1]);
}
int main()
{
	cin>>c;
    while(c--)
    {
    	maxnum=0;
    	cin>>n;
		for(int i=0;i<n;i++)
		for(int j=0;j<=i;j++)	
		cin>>a[i][j];
		search(0,0,a[0][0]);
		cout<<maxnum<<endl;
	}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40729773/article/details/81093084