一、资源问题

T1 机器分配

已知条件:每家公司分配x台机器的盈利

令f[i][j]表示前i公司分配j台机器的最优解

转移:f[i][j]=max(f[i-1][j-k]+w[i][k])

初始化:f[1][i]=w[1][i]

枚举第i个公司分配k台(直接利用已知条件),那前i-1个公司分配j-k台

T5 化工厂装箱员

一段包含A、B、C的排列,区间从左往右扫,每次区间包含10个元素,每次将区间内所有的A或B或C删除,区间再往右扩张至10个元素,问最小删除次数

令f[d][a][b][c]表示区间总共覆盖了d个数,这一次区间内有a个A,b个B,c个C的最优解

初始化:f最大值

状态转移:f[d][a][b][c]=min(f[d][0][b][c],f[d][a][0][c],f[d][a][b][0])+1

有了第一维d,防止了f状态的重复

二、上升子序列问题

T1 朴素的最长上升子序列

n2:f[i]=j 以第i个数结尾的最长上升子序列长度为j

nlogn:f[i]=j 长度为i的最长上升子序列中,第i个数最小是j

T2 包含第k个数的最长上升子序列

设第k个数为m

删去k前面>=m的,k后面<=m的,同上

k前>=m的删去后,k前面的最长上升子序列的最大值一定比m小,加上m后一定比原来更优

k后<=m的删去后,防止了答案绕过第k个数

T3 最长上升子序列划分

将上升子序列分成2部分==>最长不上升子序列长度<=2

三、线型DP

T1、舞蹈家怀特先生

f[i][l][r]跳了i步,第i步左脚在l,右脚在r的最优解

预处理:move[i][j] 从i移向j所需的代价

状态转移:f[i][l][r]=min(min(f[i][x][r]+move[x][l]),min(f[i][l][x]+move[x][r]))

特殊处理:第一步到两脚都迈出第一步

T2、绿色通道

n道题,解决每个题需要一定时间,每个题可以解决,也可以空过去,给出时间总限制,最小化最大空题段

令f[i]表示抄第i道题所花费的最小时间

状态转移方程:f[i]=min(f[j])+time[i] max(0,i-mid-1)<=j<=i-1

初始化:f数组极大值,f[0]=0

注:本体朴素的DP会TLE,所以要用线段树或单调队列优化

T3、积木游戏

n个积木堆m堆,满足堆与堆之间各积木序号升序,每堆内部从下往上积木序号升序

f[k][i][j][l] 表示 前i个积木分为k组,第k组最后一个是j,j的摆放方式为l的最大高度

状态转移:

① 与前面积木合为一组  f[k][i][i][l]=max(f[k][i][j][t])+high[i]

② 自己另放一组  f[k][i][i][l]=max(f[k-1][i-1][j][t])+high[i]

③ 不放 f[k][i][j][l]=f[k][i-1][j][l]

其中0<=j<i    0<=t<=2

状态压缩:

0 表示  ab面为底;1 表示 ac面为底; 2表示bc面为底

ans=max(f[m][n][i][j]) 1<=i<=n,0<=j<=2

编程复杂度优化:

先对输入每块积木的a,b,c排序,这样在DP中就不用判断同一块积木的长宽高

T4 、括号序列(加括号使之成为规则序列)

f[i][j] 序列i——j 成为规则序列最少添加多少

状态转移:if(i与j能匹配) f[i][j]=f[i+1][j-1]

f[i][j]=min(f[i][k]+f[k+1][j]) i<=k<j

初始化:f[i][i]=1

f[i][j]=0 (i>j)

其余极大值

四、划分型DP

T1 乘积最大

f[i][j]表示前i个数添加了j个乘号的最优解

预处理:w[i][j] 第i-j的数

状态转移:f[i][j]=max(f[k][j-1]*w[k+1][i])

T2 数的划分

将n划分为几个可重复正整数之和的方案数,顺序不同视为同种方案

f[i][j] 把i划分为j个正整数的方案数

状态转移:f[i][j]=f[i-1][j-1]+f[i-j][j]

初始化:f[0][0]=1

T3 统计单词个数

f[i][j] 前i个字母划分为j段的最优解(最多单词个数)

预处理:w[i][j] 第i到j个字母的单词数

状态转移:f[i][j]=max(f[k][j-1]+w[k+1][i])

初始化:f[i][1]=w[1][i]

T4 数字游戏

f[i][j][k] 第i—j个数划分为k个部分的最优解(各部分和的乘积)

预处理:w[i][j] 第i—j个数的和

状态转移:f[i][j][k]=max(f[i][l][k-1]*w[l+1][j])

预处理:f[i][j][1]=w[i][i]

五、棋盘DP

T1 棋盘分割

dp[k][x1][x2][y1][y2] 矩形左上角标号为(x1,y2) ,右上角标号为(x2,y2),分为k个矩形 所得到的最小平方和
初始化:dp 极大值
预处理:s[x1][x2][y1][y2]   矩形左上角标号为(x1,y2) ,右上角标号为(x2,y2)内所有数和的平方
          dp[1][x1][x2][y1][y2]=s[x1][x2][y1][y2] (相当于一刀也不切的情况)
状态转移:dp[k][x1][y1][x2][y2]=min(
             dp[k-1][x1][y1][x][y2]+s[x+1][y1][x2][y2]) //横着切,取上面一部分继续切
             dp[k-1][x+1][y1][x2][y2]+s[x1][y1][x][y2]//横着切,取下面一部分继续切
             dp[k-1][x1][y1][x2][y]+s[x1][y+1][x2][y2]//竖着切,取左边一部分继续切 
             dp[k-1][x1][y+1][x2][y2]+s[x1][y1][x2][y] //竖着切,取右边一部分继续切
)
转移过程可用记忆化搜索实现

DP整理(未完待续)的更多相关文章

  1. hdu2476【区间DP,未完待续】

    好难搞得东西.... 题意都懒得写了,看题解的巨巨莫怪啊,未完待续未完待续,回去睡觉.

  2. sublime常用快捷键整理(未完待续)

    sublime常用快捷键整理: 基本操作 cmd+o 打开文件 cmd+w 关闭当前tab cmd+n 打开新页 cmd+shift+n 打开刚刚关闭的页签 一.选择命令 1.多个单词选择 cmd+d ...

  3. lightoj 1031【区间DP,未完待续】

    题意: 给你一个n,再给你n个数,每个数<1e4; 有两个player交替取数字,每个人每一次能拿一个或多个,交替在两边拿. 游戏终止在所有的数字被取完. 两个人的分数就是所取得的数字大小总和. ...

  4. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  5. 布隆过滤器(Bloom Filter) 未完待续

    布隆过滤器雏形 未完待续..... 计算错误率 现在有一个空额布隆过滤器, 过滤器里的bit array的大小是m. 咱来插入一个元素. 这次插入过程中的第一个hash函数会算出一个位置, 然后把这个 ...

  6. 从Socket入门到BIO,PIO,NIO,multiplexing,AIO(未完待续)

    Socket入门 最简单的Server端读取Client端内容的demo public class Server { public static void main(String [] args) t ...

  7. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  8. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

  9. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

  10. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

随机推荐

  1. 【CSAPP笔记】1. 位、字节、整型

    <Computer Systems a Programmer's Perspective>,机械工业出版社.中文译名<深入理解计算机系统>.作者:(美)Randal E.Bry ...

  2. iOS- Swift:指触即开,如何集成Touch ID指纹识别功能

    1.前言 随着移动支付时代的到来,Touch ID 指纹验证迅速被支付宝,微信钱包普及,相信各位朋友使用后也大呼方便.之前写了篇关于iOS9的3D Touch的集成使用,有朋友在我博客下提到,让我写一 ...

  3. iOS- 本地文本容错搜索引擎2-->如何实现英文(英文首字母,汉语拼音)对中文的搜索?

      1.前言 先闲说几句,最近北京的雾霾真是大,呛的我这攻城师都抗不住了.各位攻城师们一定要爱护好自己的身体!空气好时,少坐多动. 如果条件好的话,最好让你们BOSS搞个室内空气净化器.因为那几天一般 ...

  4. C语言中的strstr函数

    转自:http://www.cnblogs.com/xy-kidult/archive/2012/12/25/2832460.html 早上翻<C和指针>,碰见一个子串查找问题,这个问题在 ...

  5. 谷歌地图api 开发 (转载)

    https://www.cnblogs.com/520lin/p/5800024.html

  6. JS获取地址栏中的链接URL参数

    function getUrlParam(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&am ...

  7. 获取SQL Server中连接的客户端IP地址[转]

    有时候需要获取连接到SQL Server服务器上的客户端IP地址,用什么办法呢? SELECT *FROM sys.dm_exec_connections WHERE session_id = @@S ...

  8. Java Queue 专题

    关于java中的Queue,经常用到,做个总结 Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约. (Java中的集合包括三 ...

  9. SPOJ IM_Intergalactic Map

    判断能否从一个点同时找出两条不相交的路径到另外两个点. 保证路径不相交,那么需要拆点.然后?好像就没什么了,直接最大流即可. 不过,,,不需要求出所有的最大流,只要跑两次EK看看能否增广两次就行了. ...

  10. HDU4240_Route Redundancy

    题目很简单.给一个有向图,求两点间的最大流量与任意一条路中的最大流量的比值. 最大流不说了,求出单条流量最大的路径可以用类似Spfa的方法来搞,保存到达当前点的最大流量,一直往下更新即可. 召唤代码君 ...