给定一个数塔从开头走到最下面,求走过数字之和的最大值

【动态规划笔记】:POJ 3176 树塔_c++

【动态规划笔记】:POJ 3176 树塔_算法_02

 

#include<bits/stdc++.h>
using namespace std;

int n;
int a[400][400];
int dp[400][400];
int maxa(int i,int j)
{
	
	if(dp[i][j]!=-1)
	{
		return dp[i][j];
	}
	if(i==1&&j==1)
	{
	 dp[1][1]=a[1][1];
	 return a[1][1];
    }
	dp[i][j]=a[i][j]+max(maxa(i-1,j-1),maxa(i-1,j));
	return dp[i][j];
}
int main()
{
	cin>>n;
	memset(a,0,160000);
	memset(dp,-1,160000);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
		cin>>a[i][j];
	
	}
	int res=0;

	for(int i=1;i<=n;i++)
	{
		res=max(res,maxa(n,i));
	}
	cout<<res;
 }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.