博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【DP】经典问题解析
阅读量:5922 次
发布时间:2019-06-19

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

解决DP(动态规划)问题是需要思维训练的,下面列举了四个经典的DP问题和解析,希望对大家有帮助。

 

【题目比较长,在此略去了,可以从网上搜到具体描述。】

 

(一)最长单调递增子序列问题(递减同理)

(1)用一个数组b[n]记录以a[i]结尾的最长单调递增子序列的长度

(2)b[i] = max{a[k] | a[k] < b[k],0 ≤ k < i} + 1, b[0] = 1

(3)序列a的最长单调子序列的长度为max{b[i], 0 ≤ i < n}

 

(二)最大子序列和问题

(1)用一个数组b[n]记录以a[i]结尾的最大子序列和

(2)b[i] = max{a[j] + b[i-1], a[j]}

(3)序列a的最大子序列和为max{b[i], 0 ≤ i < n}

 

(三)最大子矩阵和问题(上题的二维扩展)

(1)限定列的范围(i~j)

(2)对列范围内的每一行求和,从而化为一维序列

(3)化归为问题(二)

 

(四)背包问题

(1)用一个二维数组m,m[i][j]代表在承重j,装入物品为从i到n时可以达到的最大价值

(2)m[i][j] = max(m[i+1][j], m[i+1][j-wi]+vi)

(3)m[1][j]即为最大价值

 

(五)滑雪问题

(1)用一个结构体数组LocHeight记录每个点的坐标和高度

   用一个二维数组len记录以每个点作为路径起点的最长路径长度

(2)将结构体数组按照高度从低到高排序

   注:排序的好处是,处理某个点的时候已经处理完比该点低的所有点的信息,只需一次扫描

(3)对于某点A,四周比A点低的所有点中,选len值最大的点B,将A对应的len值设为B.len+1

(4)扫描len数组,找出最大值

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

你可能感兴趣的文章
vue echarts 实现地图大气泡图
查看>>
php 向关联数组头部插入key value 保持数组关系不变
查看>>
niginx 负载均衡
查看>>
instancing render
查看>>
PL/SQL动态SQL
查看>>
Yslow压力测试
查看>>
最常用前端框架BootStrap——栅格系统
查看>>
锚的使用
查看>>
【转载】Morris遍历二叉树 & BST(二叉搜索树) Traverse & 空间O(1) 时间O(n)
查看>>
Java和C++里面的重写/隐藏/覆盖
查看>>
关于echarts的使用----模块化单文件引入(推荐) 与标签式单文件引入
查看>>
逆序数及其求法
查看>>
laravel基础课程---3、路由(Laravel中的常见路由有哪几种)
查看>>
php中相对路径和绝对路径如何使用(详解)
查看>>
php如何实现万年历的开发(每日一课真是非常有效率)
查看>>
php实现矩形覆盖
查看>>
Myeclipse2016安装Aptana
查看>>
HTML.8其他标记
查看>>
MySQL高级学习笔记
查看>>
Linux_DNS服务器
查看>>