数字三角形算法

题目描述

显示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路

径,使该路径所经过的数字的总和最大。 每一步可沿左斜线向下或右斜

线向下走;1<三角形行数<25;三角形中的数字为整数<1000;

输入

第一行为N,表示有N行后面N行表示三角形每条路的路径权.

输出

路经所过的数字总和的最大的答案。

样例输入

5

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

样例输出

30

易错点:首先要读懂题意,题目要的是从左向下或者是从右向下;实际图形是这样的

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

多以第二行的8是不能和第三行的8相加的。这一点很重要

本题思路是,先用一个二维数组把三角形的数字读进去,然后再开一个二位数组来存放 从上到下经过该点的最大值,每个点都只有两种情况,一是从它的正上方传下来的,还有就是从它的正上方的前一个传过来的。所以只要比较这两个的大小,然后 把较大的数的值给当前位置的数组的值。当然第一行和最后一行除外。第一行和最后一行单独赋值就可以。如图,比如第三行,到1的时候,可能加上左边的3后再加1较大,也可能加上上方的8之后再加上1较大,在这儿只需要比较一下,然后赋值就可以啦。

具体情况见代码。

#include<iostream>

using namespace std;

int main()

{

int a[100][100],b[100][100];

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<=i;j++)

{

if(j==0)

b[i][j]=b[i-1][j]+a[i][j];      //j为0时,即为第一行的相加

else if(i==j)

b[i][j]=b[i-1][j-1]+a[i][j];   //i=j时,即为最后一斜行相加;

else

{

int x=b[i-1][j-1]+a[i][j];

int y=b[i-1][j]+a[i][j];

b[i][j]=x>y?x:y;

}

}

}

int max=b[N-1][0];

for(i=0;i<N;i++)

if(max<b[N-1][i])

max=b[N-1][i];

cout<<max<<endl;

}

数字三角形算法

时间: 2024-10-06 00:23:07

数字三角形算法的相关文章

C语言 &#183; 数字三角形 &#183; 算法训练

问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,-99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 30 1 #include<stdio.h> 2 int main

2018.01.01(数字三角形,最长上升子序列等)

2017.12.24  简单的动态规划 1.数字三角形(算法引入) 题目描述:下图所示是一个数字三角形,其中三角形中的数值为正整数,现规定从最顶层往下走到最底层,每一步可沿左斜线向下或右斜线向下走.设三角形有n层,编程计算出从顶层到底层的一条路径,使得该路径上的和最大,输出最大值.(n<=100) 思路&&代码(搜索回溯): #include <stdio.h> #include <math.h> #include <string.h> int m

蓝桥杯 算法训练 ALGO-124 数字三角形

算法训练 数字三角形 时间限制:1.0s   内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,-99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 3

1037 数字三角形 (dp算法解决)

#1037 : 数字三角形 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸的美国.美国人民的生活非常有意思,经常会有形形色色.奇奇怪怪的活动举办,这不,小Hi和小Ho刚刚下飞机,就赶上了当地的迷宫节活动.迷宫节里展览出来的迷宫都特别的有意思,但是小Ho却相中了一个其实并不怎么像迷宫的迷宫——因为这个迷宫的奖励非常丰富~ 于是小Ho找到了小Hi,让小Hi帮助他获取尽可能多的

『嗨威说』算法设计与分析 - PTA 数字三角形 / 最大子段和 / 编辑距离问题(第三章上机实践报告)

本文索引目录: 一.PTA实验报告题1 : 数字三角形 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 最大子段和 2.1 实践题目 2.2 问题描述 2.3 算法描述 2.4 算法时间及空间复杂度分析 三.PTA实验报告题3 : 编辑距离问题 3.1 实践题目 3.2 问题描述 3.3 算法描述 3.4 算法时间及空间复杂度分析 四.实验心得体会(实践收获及疑惑) 一.PTA实验报告题1 : 数字三角形 1.1 实践题目: 1

算法第三章上机实践报告之数字三角形

1.实践题目 7-1 数字三角形 (30 分) 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 输入格式: 输入有n+1行: 第 1 行是数字三角形的行数 n,1<=n<=100. 接下来 n行是数字三角形各行中的数字.所有数字在0..99 之间. 输出格式: 输出最大路径的值. 输入样例: 在这里给出一组输入.例如: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6

算法训练 数字三角形

时间限制:1.0s   内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,…99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 30 import ja

算法训练 数字三角形(DP)

问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,…99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 30 从下往上进行计算就好了,还可以用DP的方法来解 #include<

蓝桥算法训练 数字三角形 ALGO-124(数塔,经典dp)(hdu 2084)

问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,…99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 30 #include <algorithm> #include