算法第三章实践

1. 问题:

  

  所以问题的核心是:如何找到最优路径,得到最大的和?

2. 思路:我一开始的思路是,从顶点开始,比较左右两点的大小,然后取最大值的完事了。

    然后结果是28。

    为什么呢?原来判断到8的时候,会往右走,但是最大值的路径在最左边的,只要往右走了就无法得到最大值。

3. 算法:最后看了网上的博客,看着c++用python打了一遍,(不过是从山脚下开始的,跟oj的热身赛一样)。

for i in range(num-1, 0, -1):
    i -= 1
    for n in range(i):
        if b[i+1][n+1] > b[i+1][n]:
            b[i][n] = a[i][n] + b[i+1][n+1]
        else:
            b[i][n] = a[i][n] + b[i+1][n]
        answer.append(b[i][n])

其实基本思路就是建立两个数组a[][]和b[][],然后从a的最后一行往上叠加,每一次都增加两个数中的最大值,然后再加上山顶的数字就ok了。

4. 算法复杂度:核心算法里有两个for所以时间复杂度为o(n^2),空间复杂度的计算百度了下,因为建立了二维的表格,所以空间复杂度为n^2.

5. 心得:有些问题自己想也是不太理解吧,有一个伙伴讲解了会更快更好的理解。

转载于:https://www.cnblogs.com/RS-Sakura/p/9944334.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值