算法 -- 数字三角形之动态规划
来源:互联网 发布:苹果手机mac地址修改 编辑:程序博客网 时间:2024/06/05 19:10
好久没有好好写算法啦,因此今天晚上就思考实现老师说的一道算法题目: 用动态规划求解数字三角形.
下面简单描述下题目含义:
数字三角形中的数字要求为不超过100的非负整数.题目规定从最顶层开始往下走,选择一条路径,这条路径要求每一步沿着左斜线或者右斜线走,并且路径上的数字之和为最大值.
例如下面这样一个三角形:
1. 7
2. 3 8
3. 8 1 0
4. 2 7 7 4
5. 5 5 2 6 5
它有5行数据,其路径数字和最大值为30.
注:原题目的三角形为等边三角形,我们在实际处理中,将其记录为直角三角形.这时候它的每一步就是沿下走或者沿右斜线走.
思考 : 如何解决这样一个问题?
既然要求最大路径和,那么我们计算每一行每一个元素到达起点的数字和,并将其存储下来.最后进行比较最后一行的路径和信息即可实现.
参考代码
/************************************************************************* ** > Name : num_triangle.c ** > Author: LiYingXiao (Sweethreart502) ** > Mail : liyingxiao502@gmail.com ** > Blog : http://blog.csdn.net/u013166575 ** > Created Time: 2015年11月19日 星期四 23时32分00秒 ************************************************************************/#include <stdio.h>#define N 5// 处理函数int Process ( int n ) ;int main ( int argc , char * argv[] ){// int n ; int max ;// printf ( "请输入数字三角形的行数:\n" ) ;// scanf ( "%d" , &n ) ; max = Process ( N ) ; printf ( "\n最大路径和为%d.\n" , max ) ; return 0 ;}// 核心处理函数int Process ( int n ) { int a[6][6] = { { 0 } , { 0 } , { 0 } , { 0 } , { 0 } , { 0 } } ; int i , j ; int t1 , t2 ; int max = 0 ; // 初始化数字三角形 printf ( "请输入数字三角形每一行数据信息:\n" ) ; for ( i = 1 ; i <= n ; i++ ) { printf ( "请输入第%d行数据信息:\n" , i ) ; for ( j = 1 ; j <= i ; j++ ) { scanf ( "%d" , &a[i][j] ) ; } } // 计算每一行的的每一个元素到起点的最大距离 for ( i = 2 ; i <= n ; i++ ) { for ( j = 1 ; j <= i ; j++ ) { t1 = a[i][j] + a[i-1][j-1] ; t2 = a[i][j] + a[i-1][j] ; if ( t1 > t2 ) { a[i][j] = t1 ; } else { a[i][j] = t2 ; } } } // 比较最后一行数据信息,输出最大值即可 for ( i = 1 ; i <= n ; i++ ) { if ( a[n][i] > max ) { max = a[n][i] ; } } return max ;}
我的代码实现依赖于将数组存储为n+1行n+1列,下标含0的值都为0,这样做的原因是:
为了全局统一实现,我从三角形第二行开始计算它的每一个元素到达起点的最大数据和,采用计算方式是a[i][j] = max ( a[i-1][j-1] , a[i-1][j] ) + a[i][j] .
如果有不理解的可以尝试下在草稿纸上分析则很容易理解. -.-
0
0 7
0 3 8
0 8 1 0
0 2 7 7 4
0 5 5 2 6 5
上面的三角形即我的初始数组a.
0 0
- 算法 -- 数字三角形之动态规划
- 动态规划之数字三角形
- 动态规划之数字三角形
- 动态规划之数字三角形
- 动态规划之数字三角形
- 算法学习之动态规划--数字三角形最大路径和
- 动态规划算法:数字三角形问题
- 初探动态规划之数字三角形
- 动态规划之数字三角形问题
- 动态规划----数字三角形
- 数字三角形 动态规划
- 动态规划:数字三角形
- 动态规划--数字三角形
- 动态规划--数字三角形
- 动态规划-数字三角形
- 数字三角形--动态规划
- 动态规划&数字三角形
- 动态规划 数字三角形
- phpexcel导出数据到excel
- iOS 为什么必须在主线程中操作UI
- 委托的简化语法,聊聊匿名方法和闭包
- 欢迎使用CSDN-markdown编辑器
- 中国小企业的信息化的伪命题
- 算法 -- 数字三角形之动态规划
- Windows下安装并设置Redis
- UVA 11992 Fast Matrix Operations 线段树
- 声卡id
- Android-AsyncTask初体验
- Android DiskLruCache完全解析,硬盘缓存的最佳方案
- find命令的exec参数使用---Linux学习笔记
- 【内容转载】iOS开发----Xcode7升级之后插件无法使用与不小心点击Skipbundle的解决办法
- mysql 脚本暂存