【听课记录】17-7-11 动态规划 - 朱全民

此文转载时必须通知博主,并把原文链接及原作者放在正文醒目位置。

————————动态规划初步————————

一、常见动态规划:
求最优解、次优解;
统计问题。

二、DP模型:
线型- 一条直线、两条直线、多条直线(二维矩阵)。
树型- 明显能够构成一棵树。多叉树转二叉树:孩子兄弟表示法。
图型- 以图为模型。基于连通性的状态压缩DP(哈密顿环)。
集合类型

三、DP概念:
阶段、状态、决策、状态转移。
最优化原理、无后效性原理。

四、步骤
划分阶段—设置状态—状态转移方程—(优化决策)

五、例题分析



————————树形动态规划————————

一、步骤
从根开始-->逐层推进-->叶子节点结束

二、孩子兄弟表示法
在树型动规中,为了把多叉树转化为二叉树,方便分析(相当于把普通的题目转化为类似01背包的DP),采用孩子兄弟表示法。
一个结点,它的左儿子表示它的孩子,右儿子表示它的兄弟。
因此对于每一棵子树,在根结点没有被选择的情况下,其右儿子结点也是可以选择的。

三、特殊题型
加分二叉树:由中序遍历推断二叉树结构,由于中序遍历顺序为左—中—右,因此可假设根节点为k,再进行动态规划。

软件安装:若DP阶段出现依赖性环,则可以将环缩为一个点。

聚会的快乐:f[i][j] 其中i表示当前(根)节点。

多一个需要规划的状态,加一维。
个别状态在不同的情况下没有变化,可降维。



————————状态压缩动规————————

一、常见类型:
铺砖、摆放骑士(马)

二、特点
将一行的状态压缩成一串二进制数,每次确定一行的状态。通常需要处理的题目中任意一行都只对其周围有限行产生影响,按照各行的影响进行DP。
例如“地砖铺设”,任意一行的地砖只会对本行和接下来一行产生影响。
“骑士”,一个骑士只受它上下各两行的骑士影响。

善用#define来避免不必要的错误。



———————基于连通性的状压DP———————

一、其他概念
插头:一个格子某个方向的插头存在,表示这个格子在这个方向与相邻格子相连。
轮廓线:配合插头使用,确定连通块的一条线。
轮廓线确定方法:暂时未知

二、处理问题
图上有障碍的哈密顿回路问题。



———————动态规划优化———————

一、时间复杂度分析
O=阶段数*每个阶段的状态转移数*每次状态转移时间
优化途径:减少状态转移数

二、优化方法
从问题特性入手;
先写出基础DP方程,再进行简化或优化。

1.改变状态的表示,即改变数组F[][]的含义,减少循环变量数。也用于降维。
2.合理组织状态,如何更新状态更高效。

*其他知识:离散数学的偏序集、Dilworth定理

3.预处理出一个(或多个)数组记录某些定值,实现降维。
4.状态选取时加入贪心
5.以套餐问题为例:
  A-提前计算最多可生产多少套,剪枝状态。
  B-先解决成套生产的部分时间,再进行动态规划,减少状态数。但注意成套生产时间不能过长。
  C-淘汰一些没有意义的状态,如某种物质超标。
6.利用数据结构优化
常见数据结构:二叉堆、字典树、并查集
7.利用决策的单调性
队列优化
斜率优化
(以上两个优化需要了解证明,超出NOIP范围)



【听课记录】17-7-11 动态规划 - 朱全民

时间: 2024-10-05 23:46:14

【听课记录】17-7-11 动态规划 - 朱全民的相关文章

算法导论——lec 11 动态规划及应用

和分治法一样,动态规划也是通过组合子问题的解而解决整个问题的.分治法是指将问题划分为一个一个独立的子问题,递归地求解各个子问题然后合并子问题的解而得到原问题的解.与此不同,动态规划适用于子问题不是相互独立的情况,即各个子问题包含公共的子子问题.在这种情况下,如果用分治法会多做许多不必要的工作,重复求解相同的子子问题.而动态规划将每个子问题的解求解的结果放在一张表中,避免了重复求解. 一. 动态规划介绍 1. 动态规划方法介绍: 动态规划主要应用于最优化问题, 而这些问题通常有很多可行解,而我们希

libgdx学习记录17——照相机Camera

照相机在libgdx中的地位举足轻重,贯穿于整个游戏开发过程的始终.一般我们都通过Stage封装而间接使用Camera,同时我们也可以单独使用Camera以完成背景的移动.元素的放大.旋转等操作. Camera分为PerspectiveCamera(远景照相机)和OrthographicCamera(正交照相机). PerspectiveCamera为正常的照相机,当距离物体越远,则物体越小,一般在3D空间中使用. OrthographicCamera忽略了其Z轴,不管距离物体多远,其大小始终不

11.22 访问日志不记录静态文件11.23 访问日志切割11.24 静态元素过期时间

11.22 访问日志不记录静态文件11.23 访问日志切割11.24 静态元素过期时间编辑虚拟配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf11.23 访问日志切割修改完配置文件后,需要重新访问下网址才能生动生成日志文件,以后每到00:00就会自动生成以系统日期为名字的新的日志文件编辑虚拟配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf修改完后重新加载配置文件

11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间

11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间 11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间 原文地址:http://blog.51cto.com/wbyyy/2083288

17/10-17/11做题记录

1.Luogu P1155 双栈排序 Code: 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define inf 0x7fffffff 5 #define MN 1005 6 #define ME 1000005 7 using namespace std; 8 inline int in(){ 9 int x=0;bool f=0; char c; 10 for (;(c=getch

?完整记录一则Oracle 11.2.0.4单实例打PSU补丁的过程

本文记录了打PSU的全过程,意在体会数据库打PSU补丁的整个过程. 1.OPatch替换为最新版本2.数据库软件应用19221551补丁程序3.数据库应用补丁4.验证PSU补丁是否应用成功 1.OPatch替换为最新版本 [[email protected] usr2]$ id uid=500(oracle) gid=500(oinstall) 组=500(oinstall),501(dba) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.

传智博客(JavaWeb方面的所有知识)听课记录(经典)

一.       JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本兼容低版本的编译器版本. (2).当程序有错误的时候,使用Debug as 运行程序.双击语句设置断点.程序运行到此处停止.点击跳入方法的内部代码.点击跳过,执行下一条代码,点击跳出,跳出方法.观察变量的值,选中变量右击 选择watch. 跳入下一个断点.查看断点,调试完后一定要清除断点.结束运行断

11.动态规划(4)——找零问题

找零问题:需找零金额为W,硬币面值有(d1, d2, d3,…,dm),最少需要多少枚硬币. 问题:需找零金额为8,硬币面值有(1, 3, 2, 5),最少需要多少枚硬币. 设F(j)表示总金额为j时最少的零钱数,F(0) = 0,W表示找零金额,有零钱一堆{d1, d2, d3,…,dm}.同样根据之前的经验,要达到为j,那么必然是j – di(1 <= i <= m)面值的硬币数再加1个di面值的硬币,当然j >= di,即F(j) = F(j - di) + 1, j >=

11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间

[[email protected] ~]# /usr/local/apache2.4/bin/apachectl -tSyntax OK[[email protected] ~]# /usr/local/apache2.4/bin/apachectl graceful jpg的并没有记录在日志 [[email protected] ~]# cd /data/wwwroot/111.com/[[email protected] 111.com]# rz    上传一张图片  we,然后浏览器请求