【DP复习5】HDU 2084——数塔

#include <iostream>
#include <cstring>
using namespace std;

int dp[105][105];

int max(int a,int b)
{
	if(a>b)
		return a;
	else
		return b;
}

int main()
{
	int testcase;
	cin>>testcase;
	while(testcase--)
	{
		int floor,res;
		cin>>floor;
		memset(dp,0,sizeof(dp));
		
		for(int i=0;i<floor;i++)
		{
			for(int j=0;j<=i;j++)
			{
				cin>>dp[i][j];
			}
		}
		
		for(int i=floor-1;i>=0;i--)
		{
			for(int 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;
}

来源: 点击打开链接

DP基础中的基础。要求上一层就要知道下一层,下一层的选择有左下和右下,如是类推。

你可能感兴趣的:(【DP复习5】HDU 2084——数塔)