目录
时间限制:1秒 内存限制:128M
题目描述
请编一个程序根据展示出的三角形,计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。
每一步可沿左斜线向下或右斜线向下走;
三角形行数小于等于100;
三角形中的数字为整数;
输入描述
第一行为N,表示有N行
后面N行表示三角形每条路的路径权,每个路径权不超过10^5大小。
输出描述
路径所经过的数字的总和最大的答案
样例
输入
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
输出
30
代码实现
#include<iostream>
#include<iomanip>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int N=101;
int dp[N][N],a[N][N],sum=0;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
}
dp[1][1]=a[1][1];
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){
dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j];
}
}
for(int i=1;i<=n;i++){
sum=max(sum,dp[n][i]);
}
cout<<sum;
return 0;
}