数字三角形 问题

数字三角形

一:问题描述

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。

注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数。

输入数据:

输入的第一行是一个整数 N (1

输出要求

输出最大的和。

输入样例

5

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5

输出样例

30

解题思路

这道题目可以用递归的方法解决。基本思路是: 以 D( r, j)表示第 r行第 j 个数字(r,j 都从 1开始算 )

以 MaxSum(r, j) 代表从第 r 行的第 j 个数字到底边的最佳路径的数字之和,则本题是要求 MaxSum(1, 1) 。

从某个 D(r, j)出发,显然下一步只能走 D(r+1, j)或者 D(r+1, j+1)。如果

走 D(r+1, j),那么得到的 MaxSum(r, j)就是 MaxSum(r+1, j) + D(r, j);如果走 D(r+1, j+1),那得到的 MaxSum(r, j)就是 MaxSum(r+1, j+1) + D(r, j)。

所以,选择往哪里走,就看 MaxSum(r+1, j)和 MaxSum(r+1, j+1)哪个更大了。程序如下:

上面的程序,效率非常低,在 N值并不大,比如 N=100的时候,就慢得几乎永远算不出结果了。为什么会这样呢?是因为过多的重复计算。我们不妨将

对 MaxSum函数的一次调用称为一次计算。那么,每次计算 MaxSum(r, j)的时候,都要计算一次 MaxSum(r+1, j),而每次计算 MaxSum(r, j+1)的时候,也要计算一次 MaxSum(r+1, j)。重复计算因此产生。在题目中给出的例子里,如果我们将 MaxSum(r, j)被计算的次数都写在位置(r, j),那么就能得到下面的三角形: 1 1 1 2 1 1 3 3 1 194 1 4 6 4 1

从上图可以看出,最后一行的计算次数总和是 16,倒数第二行的计算次数总和是 8。不难总结出规律,对于 N行的三角形,总的计算次数是 20 +21+22 ……2N-1=2N。当 N= 100时,总的计算次数是一个让人无法接受的大数字。

既然问题出在重复计算,那么解决的办法,当然就是,一个值一旦算出来,就要记住,以后不必重新计算。即第一次算出 MaxSum(r, j)的值时,就将该值存放起来,下次再需要计算 MaxSum(r, j)时,直接取用存好的值即可,不必再次调

用 MaxSum进行函数递归计算了。这样,每个 MaxSum(r, j)都只需要计算 1次即可,那么总的计算次数(即调用 MaxSum函数的次数)就是三角形中的数字总数,即 1+2+3+……N = N(N+1)/2

如何存放计算出来的 MaxSum(r, j)值呢?

显然,用一个二维数组 aMaxSum[N][N]就能解决。aMaxSum[r][j]就存

放 MaxSum(r, j)的计算结果。下次再需要 MaxSum(r, j)的值时,不必再调用 MaxSum函数,只需直接取 aMaxSum[r][j]的值即可。

程序如下:

三.

从 aMaxSum[N-1]这一行元素开始向上逐行递推,就能求得最终 aMaxSum[1][1]的值了。

程序如下:

数字三角形

一:问题描述

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。

注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数。

输入数据:

输入的第一行是一个整数 N (1

输出要求

输出最大的和。

输入样例

5

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5

输出样例

30

解题思路

这道题目可以用递归的方法解决。基本思路是: 以 D( r, j)表示第 r行第 j 个数字(r,j 都从 1开始算 )

以 MaxSum(r, j) 代表从第 r 行的第 j 个数字到底边的最佳路径的数字之和,则本题是要求 MaxSum(1, 1) 。

从某个 D(r, j)出发,显然下一步只能走 D(r+1, j)或者 D(r+1, j+1)。如果

走 D(r+1, j),那么得到的 MaxSum(r, j)就是 MaxSum(r+1, j) + D(r, j);如果走 D(r+1, j+1),那得到的 MaxSum(r, j)就是 MaxSum(r+1, j+1) + D(r, j)。

所以,选择往哪里走,就看 MaxSum(r+1, j)和 MaxSum(r+1, j+1)哪个更大了。程序如下:

上面的程序,效率非常低,在 N值并不大,比如 N=100的时候,就慢得几乎永远算不出结果了。为什么会这样呢?是因为过多的重复计算。我们不妨将

对 MaxSum函数的一次调用称为一次计算。那么,每次计算 MaxSum(r, j)的时候,都要计算一次 MaxSum(r+1, j),而每次计算 MaxSum(r, j+1)的时候,也要计算一次 MaxSum(r+1, j)。重复计算因此产生。在题目中给出的例子里,如果我们将 MaxSum(r, j)被计算的次数都写在位置(r, j),那么就能得到下面的三角形: 1 1 1 2 1 1 3 3 1 194 1 4 6 4 1

从上图可以看出,最后一行的计算次数总和是 16,倒数第二行的计算次数总和是 8。不难总结出规律,对于 N行的三角形,总的计算次数是 20 +21+22 ……2N-1=2N。当 N= 100时,总的计算次数是一个让人无法接受的大数字。

既然问题出在重复计算,那么解决的办法,当然就是,一个值一旦算出来,就要记住,以后不必重新计算。即第一次算出 MaxSum(r, j)的值时,就将该值存放起来,下次再需要计算 MaxSum(r, j)时,直接取用存好的值即可,不必再次调

用 MaxSum进行函数递归计算了。这样,每个 MaxSum(r, j)都只需要计算 1次即可,那么总的计算次数(即调用 MaxSum函数的次数)就是三角形中的数字总数,即 1+2+3+……N = N(N+1)/2

如何存放计算出来的 MaxSum(r, j)值呢?

显然,用一个二维数组 aMaxSum[N][N]就能解决。aMaxSum[r][j]就存

放 MaxSum(r, j)的计算结果。下次再需要 MaxSum(r, j)的值时,不必再调用 MaxSum函数,只需直接取 aMaxSum[r][j]的值即可。

程序如下:

三.

从 aMaxSum[N-1]这一行元素开始向上逐行递推,就能求得最终 aMaxSum[1][1]的值了。

程序如下:


相关内容

  • 浅析岩土工程勘察方法
  • 摘要:目前岩土工程勘察市场格局中,占主导地位的勘察行为主体在技术方面的大的方向和原则上基本达成共识,各单位要进一步提高市场竞争力,就要多从细节上下工夫,使自己提供的勘察成果更直接.方便地满足设计的需要.随着计算机信息技术的发展,岩土工程勘察数字化技术逐渐得到广泛应用.本队针对岩土工程勘察手段措施进行 ...

  • 小学三年级奥数基础教程
  • 小学奥数基础教程(三年级) 第1讲 加减法的巧算 第2讲 横式数字谜(一) 第3讲 竖式数字谜(一) 第4讲 竖式数字谜(二) 第5讲 找规律(一) 第6讲 找规律(二) 第7讲 加减法应用题 第8讲 乘除法应用题 第9讲 平均数 第10讲 植树问题 第11讲 巧数图形 第12讲 巧求周长 第2讲 ...

  • 2015年中考复习专题--规律型问题
  • 2015年中考复习专题 --规律探索型问题 编制人: 雅思学校 唐利华 一.考点链接 1. 问题特征: 是指给出具有某种特定关系的数.式.图形,或是给出与图形有关的操作和变化过程,要求通过观察.分析.推理,探究其中所蕴含的规律,进而归纳或猜想出一般性的结论. 2. 基本类型: (1)数字猜想型:(2 ...

  • 小学三年级奥数教材
  • 目 录 (每节课两讲) ▴ 第一讲 加减法的巧算(一)„„„„„„„2 ▴ 第二讲 加减法的巧算(二)„„„„„„„ 7 ▴ 第三讲 乘法的巧算 „„„„„„„„„„12 ▴ 第四讲 配对求和 „„„„„„16 ▴ 第五讲 找简单的数列规律„„„„„„„„ 17 ▴ 第六讲 图形的排列规律„„„„„ ...

  • 全脑风暴 让你越玩越聪明的1228个思维游戏
  • 请选择星星评价 作者:唐菁编著 出版日期:2009 页数:312 内容提要 本书用好玩有趣的游戏,教你如何克服易犯的错误,从不合逻辑的情景中找出符合逻辑的答案,不让习以为常的错误思维阻碍你,让你的思考更从容,各种能力得到大幅提高.相信经过这些益智游戏的训练,你会变成一个成功的人,一个灵活的人,一个会 ...

  • 六年级金牌奥数培优-第 12 讲:计数综合
  • 第十二讲 计数综合 教学目标 1. 使学生正确理解排列.组合的意义:正确区分排列.组合问题: 2. 了解排列.排列数和组合数的意义,能根据具体的问题,写出符合要求的排列或组合: 3. 掌握排列组合的计算公式以及组合数与排列数之间的关系: 4. 会.分析与数字有关的计数问题,以及与其他专题的综合运用, ...

  • 分类计数原理与分布计数原理2
  • 课 题: 10.1加法原理和乘法原理 (二) 教学目的: 1. 进一步理解两个基本原理. 2. 会利用两个原理分析和解决一些简单的应用问题 教学重点:教学难点:授课类型:新授课课时安排:1课时 教 具:多媒体.实物投影仪 教学过程: 一.复习引入: 做一件事情,完成它可以有n 类办法,在第一类办法中 ...

  • 七年级数学集体备课稿
  • 七年级数学集体备课稿 第一章<有理数> 主备人: 孙群保 一.本章的主要内容: 对正.负数的认识:有理数的概念及分类:相反数与绝对值的概念及求法:数轴的概念.画法及其与相反数与绝对值的关系:比较两个有理数大小的方法:有理数加.减.乘.除.乘方运算法则及相关运算律:科学计数法.近似数.有效 ...

  • 乘除法数字谜(一)
  • 第一讲 乘除法数字谜(一) 专题简析: 解决算式谜题,关键是找准突破口,推理时应注意以下几点: 1. 认真分析算式中所包含的数量关系,找出隐蔽条件,选择有特征的部分作出局部判断: 2. 利用列举和筛选相结合的方法,逐步排除不合理的数字: 3. 试验时,应借助估值的方法,以缩小所求数字的取值范围,达到 ...