博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法训练 数字三角形(递归求数组类的最大值)(示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路   径,使该路径所经过的数字的总和最大。)
阅读量:3962 次
发布时间:2019-05-24

本文共 744 字,大约阅读时间需要 2 分钟。

问题描述

(图3.1-1)示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路

  径,使该路径所经过的数字的总和最大。
  ●每一步可沿左斜线向下或右斜线向下走;
  ●1<三角形行数≤100;
  ●三角形中的数字为整数0,1,…99;
在这里插入图片描述

输入格式

  文件中首先读到的是三角形的行数。

接下来描述整个三角形

输出格式
  最大总和(整数)
样例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30

思路:

这一道题首先很容易想到的是递归,遍历所有的路径,然后找出最大值,但是,可惜的是超时。

我们需要的是从倒数第二行倒着看,你会发现一个规律。
我们以一个串序号为例
1
2 3
4 5 6
7 8 9 10
先看倒数第二行
4 = max(7,8) + 4
5 = max(8,9) + 5
6 = max(9,10) + 6
接着向上一行
2 = max(4,5) + 2
3 = max(5,6) + 3
接着向上一行
1 = max(2,3) + 1
规律很明显就找出来了

代码呈上:

#include 
#define max(x,y) (x>y)?x:yint dp[100][100];int main(){
int n; scanf("%d",&n); int i,j; for(i=0;i
=0;i--) for(j=0;j<=i;j++) dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]); printf("%d\n",dp[0][0]); return 0;}

运行示例

在这里插入图片描述

转载地址:http://uirzi.baihongyu.com/

你可能感兴趣的文章
C++连接CTP接口实现简单量化交易
查看>>
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>
C++的4种智能指针剖析使用
查看>>
RPC框架实现之容灾策略
查看>>
Docker私库
查看>>
hdu——1106排序(重定向)
查看>>
hdu——1556Color the ball(树状数组)
查看>>
hdu——1541Stars(树状数组)
查看>>
快速幂的精简代码
查看>>
求大数乘方的前n位数字(对数加快速幂)
查看>>
hdu——2602Bone Collector(第一类背包问题)
查看>>
hdu——1711Number Sequence(kmp专练)
查看>>
strstr函数和find函数的异同
查看>>
Java的反射
查看>>
HTTP请求之POST与GET区别
查看>>
SSM结合Redis
查看>>