动态规划实现数字三角形问题

动态规划实现数字三角形问题

 (1)题目描述如图所示

    

 

  (2)我们用上述矩阵分析:自顶向下分析入下图二维矩阵所示

  (3)我们从arr[2][0]开始分析,arr[2][0]是计算当前位置按照题中要求(每一条路径只能往下或者右下走),可以得到arr[3][0]>arr[3][1],所以arr[2][0]值更新为arr[3][0]+arr[2][0],类似的arr[2][1]的值更新为arr[3][1]和arr[3][2]中较大的值,即arr[2][1]+arr[3][2]......按照这样的递推方式,我们可以在arr[0][0]的时候得到最大值,这个最大值就是我们需要求出的最长路径。

  (4)而由上述分析,我们也可以简单的总结出这个题目的状态公式:

 

  (5)这样我们可以简单的总结出代码

 1 /**
 2  * 三角形矩阵  求最小路径
 3  *
 4  */
 5 public class Test5 {
 6     //给定一个二维数组
 7     static int[][] arr = {
 8                             {2,0,0,0},
 9                             {3,4,0,0},
10                             {6,5,7,0},
11                             {4,1,8,3}};
12     static int[][] triangle = {
13             {7,0,0,0,0},
14             {3,8,0,0,0},
15             {8,1,0,0,0},
16             {2,7,4,4,0},
17             {4,5,2,6,5}
18     };
19     /*
20      * 状态方程
21      * f(i,j) = min{f(i,j+1),f(i+1,j+1)}+(i,j)
22      */
23     public static void main(String[] args) {
24         
25         int len = arr.length;
26         System.out.println("动态规划:");
27         System.out.println(maxTotal(arr));
28         System.out.println(maxTotal(triangle));
29     }
30     
31     /**
32      * 动态规划实现
33      * @param arr
34      * @return
35      */
36     static int maxTotal(int[][] arr) {
37         for (int i = arr.length - 2; i >= 0; i--) {
38             for (int j = 0; j < i+1; j++) {
39                 arr[i][j] += Math.max(arr[i+1][j], arr[i+1][j+1]);
40             }
41         }
42         return arr[0][0];
43     }
44 }

  (6)测试结果也是显而易见的:

 

posted @ 2018-12-02 15:48 风沙迷了眼 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值