数字三角形
给定一个由n行数字组成的数字三角形,设计算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
例子输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
例子输出
30
正推法
问题分析:数字三角形由上到下求解路径时,每一步都可以向左斜下方或者右斜下方进行移动。
解题思路:使用一个数组存储数字三角形的信息,另一个数组存储从上到下到达该位置的最大值,该位置的最大值情况仅有两种,一种是正上的最大值加上当前位置的值,另一种是该位置正上方前一个位置的最大值加上该位置的值,比较两种情况,选择最大值为该位置的最大值进行赋值。
代码如下
#include<iostream>
using namespace std;
int main()
{
int a[100][100],dp[100][100];//a数组用来接收数字三角形里的值,dp数组存储到达该位置的最大值
int i,j,N;
cin>>N;//输入数字三角形的层级
for(i=0;i<N;i++)
for(j=0;j<=i;j++) //接收数字三角形的数字
cin>>a[i][j];
b[0][0]=a[0][0];//第一个值即是当前位置的最大值。
for(i=1;i<N;i++)
{
for(j=0;j&l