[总结-动态规划]经典DP状态设定和转移方程
马上区域赛,发现DP太弱,赶紧复习补上。
#普通DP
CodeForces-546D Soldier and Number Game 筛法+动态规划
待补
UVALive-8078 Bracket Sequence
问以每个字符为左端点的最长括号序列是多长。(包括尖、花、中小括号)
状态:设dp[i]为从i开始的括号序列最长长度。
转移:以i+1为起点的最长串后边的字符若与左括号匹配,答案是加上这个字符后边的最长串,否则为零。
HDU-1024 Max Sum Plus Plus
给一个序列,找m个不重叠的连续子串,使这几个子串内的元素和的和最大。
即sum(i1, j1)+sum(i2, j2)+...+sum(im, jm)最大
状态:dp[i][j]表示选择第i个元素,当前是第j个子串。
转移:dp[i][j]=max(dp[i-1][j], dp[k][j-1])+num[i], (k<=i-1)
优化:
- 维护max(dp[k][j-1])
- 滚动数组去掉第一维
HDU-4055 Number String
给一个序列相邻元素各个上升下降情况('I'上升'D'下降'?'随便),问有几种满足的排列。
例:ID
答:2 (231和132)
状态:dp[i][j]表示满足以j为结尾的,长度为i的排列方案数。
转移:
str[i]=='I': dp[i][j]=sum(dp[i-1][k]) (1<=k<=j-1)
str[i]=='D': dp[i][j]=sum(dp[i-1][k]) (j<=k<=i)
str[i]=='?': dp[i][j]=sum(dp[i-1][k]) (1<=k<=i)
HDU-5009 Paint Pearls
给一串序列,可以任意分割多次序列,每次分割的代价是被分割区间中的数字种数。
求分割区间的最小代价。n<=5e4
例:1 3 3
答:2
状态:dp[i]表示从0到i序列的分割代价。
转移:dp[i]=min(dp[j]+cnt[j-1][i]^2)
优化:双向链表删除元素,优化掉j的选择
UVA-11584 Partitioning by Palindromes
给一个字符串序列,问回文串的最少个数。
例:aaadbccb
答:3(分为aaa, d, bccb三份)
状态:dp[i]表示从0到i的回文串最少个数
转移:dp(i)=min( dp(j-1)+1 | [j, i]是回文串 )
优化:预处理回文串,复杂度降至O(n^2)
#区间DP
HYSBZ-1566 管道取珠
题意相见 https://www.cnblogs.com/tanglizi/p/9489073.html
当面对\sum a^2的时候,把情形分成两种。当这两种情景(状态)相同时,方案数即为a^2。
状态和方程待补。
LightOJ-1422 Halloween Costumes
想参加聚会,每场聚会需要穿对应的衣服。
现在有需要参加的聚会的衣服序列。
对策是可以穿着多件衣服,按聚会不同脱下即可;或者直接在当前衣服上在加一件衣服。
问最少穿过几件衣服。
状态:dp[i][j]为第i到第j聚会的穿衣最小数。
转移:dp[i][j]=min(dp[i][k]+dp[k+1][j-1]), dp[i][j]=dp[i][j-1]+1
UVA-1331 Minimax Triangulation
三角剖分系列。
给一个任意多边形,把它分为多个三角形。
求某方案中最大的三角形是各方案中最小的面积的三角形面积。
状态:dp[i][j]为从i到j顺时针区间的多边形最小方案的值。
转移:dp[i][j]=min(dp[i][j], max(Area(i, k, j), dp[i][k], dp[k][j]))
HDU-5693 D Game
待补好题
UVA-10003 Cutting Sticks
有根棍子,上面有些分割点(n<50),每次按分割点切割棍子时,费用为当前棍子的长度。
问有什么样的顺序切完分割点,使总费用最小。
状态:dp[i][j]表示分割点ij之间棍子的最小切割费用。
转移:dp[i][j]=min(dp[i][k]+dp[k+1][j])+pos[j]-pos[i]
ZOJ-3537 Cake
三角剖分系列。
给一个多边形,需要分成若干三角形,且每分一次边有代价|xi+xj|*|yi+yj|%p。
问总代价最小值。
状态:dp[i][j]表示第i节点到第j节点围城的多边形最小值。
转移:dp[l][j]=min(dp[l][k]+dp[k][j]+cost(l, k)+cost(k, j));
三角剖分边界:dp[i][j]=INF, dp[i][i]=dp[i][i+1]=0
三角剖分原理:dp(i, j)(包含点ij且i<j)表示顺时针从i到j的凸多边形最值,则ijk可表示三角形顶点。
POJ-1651 Multiplication Puzzle
矩阵链乘问题
给一个序列,每次取一个元素的代价是c[i-1]c[i]c[i+1],问取到剩下2个元素的代价最小值。
状态:设dp(i, j)表示i到j的元素全部选择后的最小值,要注意是全部元素没有被选择过,且端点左右的元素没有被选过
转移:dp(i, j)=min(dp(i, k-1)+dp(k+1, j)+c[l-1] * c[k] * c[r+1])
注意:
- k的取值范围,按定义来就是i~j
- 为何状态转移是取k,而其他两数在端点?
我们可以证明,这样的状态转移包含了所有取数情况,而取(k-1, k, k+1)(先取k元素)是明显不可行的,
因为接下来区间端点代价计算就是错误的。 - 边界条件问题,我们一定要分析区间有0, 1, 2, 3个值的情形。我们发现l>r时,即上次的k选择在了端点上,这部分代价在上一层已经计算完毕。l==r时,按定义发现只能有一种三元组。
POJ-2955 Brackets
给一个可能合法的括号序列(包含中小括号),问最长合法子串最长长度。
貌似可以用简单dp的方法?
状态:dp[i][j]表示i到j的最长长度。
转移:
dp[i][i+len]=max(dp[i][i+len], dp[i][k]+dp[k+1][i+len])
dp[i][i+len]=max(dp[i][i+len], dp[i+1][i+len-1]+2*ismatch(i, i+len))
以下待补:
#概率DP
#树形DP
#数位DP
#背包问题
#典型DP
[总结-动态规划]经典DP状态设定和转移方程的更多相关文章
- DP 状态 DP 转移方程 动态规划解题思路
如何学好动态规划(2) 原创 Gene_Liu LeetCode力扣 今天 算法萌新如何学好动态规划(1) https://mp.weixin.qq.com/s/rhyUb7d8IL8UW1IosoE ...
- POJ 1185 炮兵阵地(经典的状态压缩DP)
题意:中文题. 思路,经典的状态压缩题目. 由于列长比较小,我们可以以行为阶段用状态压缩来做. 由于攻击只占两个格,这样从行的角度看,第i行的炮兵只与前i-1和前i-2行有关系.这样如果用j,k,l分 ...
- nyist oj 311 全然背包 (动态规划经典题)
全然背包 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 直接说题意,全然背包定义有N种物品和一个容量为V的背包.每种物品都有无限件可用.第i种物品的体积是c,价值是 ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- dp状态压缩
dp状态压缩 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的就是那种状态很多,不容易用一般的方法表示的动态规划问题,这个就更加的难于把握了.难点在于以下几个方面:状 ...
- 动态规划——区间DP,计数类DP,数位统计DP
本博客部分内容参考:<算法竞赛进阶指南> 一.区间DP 划重点: 以前所学过的线性DP一般从初始状态开始,沿着阶段的扩张向某个方向递推,直至计算出目标状态. 区间DP也属于线性DP的一种, ...
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- poj1458 求最长公共子序列 经典DP
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 45763 Accepted: 18 ...
- Bomb HDU 3555 dp状态转移
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3555 题意: 给出一个正整数N,求出1~N中含有数字“49”的数的个数 思路: 采用数位dp的状态转移方程 ...
随机推荐
- 0709MySQL 数据库性能优化之表结构优化
转自http://isky000.com/database/mysql-perfornamce-tuning-schema MySQL 数据库性能优化之缓存参数优化 MySQL数据库性能优化之硬件瓶颈 ...
- C#--Task知识点
5天玩转C#并行和多线程编程 TASK使用总结 Task是什么,字面意思是任务 表示一个异步操作.它是异步操作的首选方式.Task是FRAMEWORK4中的新特性,封装了以前的Thread,并管理Th ...
- mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?
mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...
- 基于Dynamic Proxy技术的方法AOP拦截器开发
在面向对象编程中,会用到大量的类,并且会多次调用类中的方法.有时可能需要对这些方法的调用进行一些控制.如在权限管理中,一些用户没有执行某些方法的权限.又如在日志系统中,在某个方法执行完后,将其执行的结 ...
- PHP自己定义函数及数组
个人原创博客:http://www.phpthinking.com/archives/350 一.自己定义函数 自己定义函数就是我们自己定义的函数.在PHP中自己定义函数格式例如以下: 1 funct ...
- 文字录入无限制Undo,Redo的实现
这里只针对Edit的内容做一个简单的undo,redo功能: 原理就是,将新增字符和相关信息添加到undo列表,在undo动作时,取记录信息,并在edit中删除新增的字符,然后将此动作添加到redo列 ...
- iOS10 推送通知 UserNotifications
简介 新框架 获取权限 获取用户设置 注册APNS,获取deviceToken 本地推送流程 远程推送流程 通知策略(Category+Action) 附件通知 代理回调 简介 iOS10新增了Use ...
- SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理——深入的话需要去折腾Azure Active Directory
SRV记录 SRV记录 什么情况下会用到SRV记录? [SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理] SRV记录的添加方式 A.主机记录处格式为:服务的名字.协议的类型 例如 ...
- DDos攻击篇
DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是目前最强大.最难防御的攻击之一. 1.1. SY ...
- [BZOJ 3387] Fence Obstacle Course
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3387 [算法] f[i][0]表示从第i个栅栏的左端点走到原点的最少移动步数 f[i ...