DP算法的经典例子
数塔问题
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
#include<stdio.h>
#include<iostream>
using namespace std;
int max(int a,int b)
{
return a=a>b?a:b;
}
int main()
{
int T,n,i,j;
int a[100][100];
cin>>T;
while(T--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=n-1;i>=0;i--)
{
for(j=0;j<i;j++)
{
a[i-1][j]=max(a[i-1][j]+a[i][j],a[i-1][j]+a[i][j+1]);
}
}
printf("%d\n",a[0][0]);
}
return 0;
}