原题链接
这题和POJ里面的 1163 The Triangle 一模一样,我记得那是我AC的第一个DP的题。呵呵。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main()
{
int n,i,j,max,cases;;
int num[100][100],a[100][100];
cin>>cases;
while (cases--)
{
cin>>n;
memset(num,0,sizeof(num));
memset(a,0,sizeof(a));
for (i=0;i<n;i++)
for (j=0;j<=i;j++)
cin>>num[i][j];
a[0][0]=num[0][0];
for (i=1;i<n;i++)
{
for (j=0;j<=i;j++)
{
if (j==0) a[i][j]=a[i-1][j]+num[i][j];
else if (j!=0)
{
if (num[i][j]+a[i-1][j-1]>num[i][j]+a[i-1][j])
a[i][j]=num[i][j]+a[i-1][j-1];
else a[i][j]=num[i][j]+a[i-1][j];
}
}
}
max=a[n-1][0];
for (i=1;i<n;i++)
{
if (a[n-1][i]>max) max=a[n-1][i];
}
cout<<max<<endl;
}
return 0;
}