#include<iostream>
#include<algorithm>
#include<stdio.h>
int Triangle[102][102];
int dp[102][102];
using namespace std; //yitiao
int main()
{
int num;
cin>>num;
for(int i=1;i<=num;i++)
for(int j=1;j<=i;j++)
{
scanf("%d",&Triangle[i][j]);
}
dp[1][1]=Triangle[1][1];int MAX=dp[1][1]; //設置初始值
for(int i=2;i<=num;i++)
for(int j=1;j<=i;j++)
{
dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+Triangle[i][j]; //所有的值只能來自上一行的兩個數,當然邊界的值只能來自一邊,所以另一邊的值全部置爲0
if(dp[i][j]>MAX)
MAX=dp[i][j]; //判斷最大值可以不用寫
}
cout<<MAX<<endl;//cout<<*max_element(dp[num],dp[num]+num)<<endl;最大值只出現在最後一行所以用這個判斷再好不過
}
很明顯的動態規劃題目
題目來自:http://acm.nyist.net/JudgeOnline/problem.php?pid=18