博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划1
阅读量:5975 次
发布时间:2019-06-20

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

 

 

递归写法

或者

 

也会很多重叠的问题

1、记忆化搜索

 

2、动态规划

 

斐波那契数列,就是从爬楼梯里面总结出来的。

 

经典的动态规划问题

 

有时候记忆化搜索会比较难写出递归的代码,比如这道题。

 

求【2】的最短路径,其实就i是求【3】【4】里面的最短路径,就是求【6】,【5】,【7】的最短路径,然后最后一列的最短路径就是他自己。

这样会有重复的部分,重复的就放在记忆化搜索数组里面就好。

其实这个递归代码并不好写。

那么记忆化想出来了,怎么改成动态规划?

从基本问题入手,可以想到,对于第三层来说,最短路径就是当前数字+下一层相邻里面最小的数字。

对第二层来说,也是这样。

所以就可以写出一个循坏的代码(动态规划更像循环)

可以用一个数组,记录每一行的最小值,但是这样好像比较麻烦,

干脆直接覆盖原数组,因为算出最小值之后,原来的数字就没有用了。

我的代码。

int len = triangle.size();        //最后一行不用改        //从倒数第二行开始        for(int i=len-2;i>=0;i--){            List
current = triangle.get(i); List
next = triangle.get(i+1); //看他的排布状况,不是开头对齐排列的,相邻好像就+0,+1 //当前这个数字的最短路径 = 当前数字+min{last(当前+0,当前+1)} int index = current.size(); for(int j=0;j

一次通过美滋滋

 

 

 

这个题其实也很简单。

求a11的最短路径,其实就是求a12和a21的最短路径,然后选这里面最小的就是了。

然后递归代码也不好写。

怎么办呢?那就从最后往上加上去。

最后一行没法向下走,所以最后一行的最短路径都是直接加上右边。

最右列的元素,就是直接加上下边。

然后直接覆盖原值。

所以对于普通元素,就是看右边和下边哪个小就好了。

最后【0】【0】就是答案

//从最后一个算起        int row = grid.length-1;        int column = grid[0].length-1;        for(int i=row;i>=0;i--){            for (int j=column;j>=0;j--){                if(i==row&&j==column){                    continue;                }else if (i==row){                    //如果是最后一行,就没法向下走了,那么最短路径就是直接加上右边                    int right = grid[i][j+1];                    grid[i][j]+=right;                }else if(j==column){                    //如果是最右一列,就没法往右走了,那么最短路径就是直接加上下面                    int next = grid[i+1][j];                    grid[i][j]+=next;                }else {                    //选右边的下边里,最短的路径                    int right = grid[i][j+1];                    int next = grid[i+1][j];                    if(right

一次通过美滋滋

转载于:https://www.cnblogs.com/weizhibin1996/p/9250300.html

你可能感兴趣的文章
从尼古拉斯·泽卡斯开始学习
查看>>
javascript中关于作用域和闭包
查看>>
js的parseInt() map(),reduce()方法详解
查看>>
golang数据类型与MySQL数据类型的对应
查看>>
JDBC 4.2 Specifications 中文翻译 -- 第九章 连接
查看>>
es6的Proxy(代理)
查看>>
CentOs 7.2下ELK日志分析系统搭建
查看>>
Eclipse Modeling Framework, 2nd Edition. (EMF)学习笔记(一)——EMF介绍
查看>>
Laravel 源码解读:php artisan make:auth
查看>>
2017-06-08 前端日报
查看>>
[转]json2.js 源码解读
查看>>
使用 python-nmap 进行端口扫描
查看>>
几个让我印象深刻的面试题(二)
查看>>
[译]高性能浏览器网络(第九章)--HTTP简史
查看>>
react draft api 简介
查看>>
PHP中的foreach循环
查看>>
【转】ionic run android 成功launch success,但是genymotion虚拟机没有显示
查看>>
Docker入门(一) - 仓库、容器、镜像、数据卷
查看>>
怎样才不浪费IP的价值?
查看>>
JS能力测评经典题
查看>>