HDU2084 数塔 【DP问题】

自己开专题再练习一下;

数塔比较基础了,有点想二叉树,但是输入的时候要注意输入量=当前的深度;

第一层输入一个,第二层输入两个,第三层输入三个。。。。

对于每一层,比较父节点+左子节点or父节点+右子节点的大小进行递推;

最终从顶端开始向下搜索就行了;

#include <bits/stdc++.h>
using namespace std ;
int dp[500][500];
int main()
{
	int t , i, j;
	cin>>t;
	while(t--)
	{
		int n ;
		cin>>n;
		for(i=0;i<n;i++)
		{
			for(j=0;j<=i;j++)
			{
				cin>>dp[i][j];//*I表示深,J表示横向; 
			}
		}
		for(i=n-1;i>0;i--)
		{
			for(j=0;j<i;j++)//*从底部的上一个结点开始寻找最大值; 要么是此结点+子节点左侧;要么右侧;二叉树 
			{
				dp[i-1][j]=max((dp[i-1][j]+dp[i][j]),(dp[i-1][j]+dp[i][j+1]));
			}
		}
		cout<<dp[0][0]<<endl;
	}
	return 0 ;
}

你可能感兴趣的:(HDU2084 数塔 【DP问题】)