就是上到下最大的一条路的值。
记得每个点只能选择2条路就行。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[101][101],b[101][101],n;
int main()
{
while(~scanf("%d",&n))
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
scanf("%d",&a[i][j]);
memset(b,0,sizeof(b));
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
b[i][j]=a[i][j]+max(b[i-1][j-1],b[i-1][j]);
int m=0;
for(j=1;j<=n;j++)
if(m<b[n][j])m=b[n][j];
printf("%d\n",m);
}
}
方法不止一种。