动态规划
chrt
这个作者很懒,什么都没留下…
展开
-
[NOI 2005] 瑰丽华尔兹:dp+单调队列
状态转移方程,以船体向南倾斜为例,其中f[i][j][k]表示经历前k个时间段后停留在第i行第j列的最长滑行距离: f[i][j][k]=max{f[i−d][j][k−1]+d,0≤d<离前面最近的障碍物的距离}怎样优化它呢?原创 2016-09-10 21:07:12 · 412 阅读 · 0 评论 -
[bzoj 1879] [Sdoi2009]Bill的挑战:状压DP,自创数学公式(?)
题意:给N个(1<=N<=15)含小写字母、?的长度不超过50的等长字符串,求有多少个含小写字母的字符串和恰好K个串匹配。?可匹配任意字符。我写了个奇怪的状压DP并发现一个计算恰在n个集合中出现k次的元素数目的数学公式......人生第一次发明数学公式(?),不过不会证......原创 2016-11-06 20:06:21 · 572 阅读 · 0 评论 -
[CodeVS 2185] 最长公共上升子序列:DP
题意:求两个序列的最长公共严格上升子序列的长度。NOI 题库里有这道题,序列长度<=500。容易想到一个O(n^3)的做法:设f[i][j]为a[0..i]、b[0..j]以i、j结尾的最长公共严格上升子序列的长度,同时维护g[i][j] = max { f[k][j] [k<=i & a[k]=b[j]] } + 1。实现中,我把g滚动了,于是需要逆序枚举。原创 2016-11-16 11:57:00 · 414 阅读 · 0 评论 -
[bzoj 1009] [HNOI2008]GT考试:DP,单串AC自动机,矩阵快速幂
题意:给一个长为M(M<=20)的十进制数字串,求有多少个长为N(N<=10^9)的十进制数字串不包含它,结果对K(K<=10^3)取模。在黄学长博客的KMP分类中找到这题。并没产生什么好思路……准确地说是没深入思考,应该批评。原创 2016-11-01 13:35:08 · 291 阅读 · 0 评论 -
[NOIP 2007] 矩阵取数游戏:DP,高精度
题意:n*m(n, m<=80)的矩阵,每次从各行首或尾取一个数,获得分值Sigma 数值*2^i,i是取数次数,从1算起。决策:从行首或行尾取一个数。各行之间独立,每行单独考虑,可以用DP解决。整个程序DP就几行,高精度代码占主要篇幅……其实我是为了测试刚写的高精度类才写这题。用了高精度乘法。看了其他解答,发现没必要,因为2*2=2+2。原创 2016-11-16 23:22:33 · 411 阅读 · 0 评论 -
[bzoj 1053] [HAOI2007]反素数ant:数论,DAG上最短路
题意:设g(i) = i的约数个数,若对于某个正整数x,所有0<i<x都有g(i)<g(x),那么称x为反素数。求不大于n的最大反素数。(n<=2*10^9)暑假的时候TYQ同学提到一个有趣的概念叫做反素数,看到bzoj第一页有这道题,于是来写一写。关于约数个数,我们知道什么?约数个数定理:设x=∏pi^ai,由乘法原理,约数个数σ(x)=∏(ai+1)。原创 2016-12-04 14:52:55 · 559 阅读 · 0 评论 -
[NOIP 2016] 换教室:数学期望,DP
题意:一共有v间教室,e条有长度的双向通道,可能有重边和自环(v≤300,e≤90000)。n节课(n≤2000),每节课有两间教室可选,默认为c[i],可申请更换为d[i],申请要么通过要么不通过,通过的概率是p[i],所有申请在开始所有课程之前提交。求提交的申请不超过m个的前提下,依次上完这n节课途经距离的期望的最小值。原创 2016-12-08 13:56:24 · 868 阅读 · 0 评论 -
[bzoj 1003] [ZJOI2006]物流运输:最短路,DP
题意:m个点e条边的无向图(1≤m≤20),把货物从1运到m,一些点在有一些时段里不可用,求n天的花费最少的运输方案(n≤100)。花费等于路径长度之和加上K*路径变更的次数。无意中看过这道题的tag:最短路+DP,所以也不能完全算作是自己想出来的。QAQ“路径变更的次数”使我们想到把一段时间内不变的路径放到一起处理,划分DP的模型自然地显现出来。原创 2016-12-16 18:38:39 · 508 阅读 · 0 评论 -
Burnside引理和Polya定理 & [bzoj 1004] [HNOI2008]Cards:Burnside引理,动态规划
题意:有Sr张红色牌、Sg张绿色牌和Sb张蓝色牌,m种洗牌法(置换),两种牌相同当且仅当一种能洗成另一种,保证洗牌法满足封闭性、存在逆元,问有多少种染色方案。Burnside引理和Polya用于解决等价类计数问题。本文介绍了Burnside引理和Polya定理,给出了逻辑上严谨的证明,并在bzoj 1004中加以应用。原创 2016-12-27 23:35:24 · 589 阅读 · 0 评论 -
[bzoj 1833] [ZJOI2010]count 数字计数:数位DP
题意:求[a, b]之间的所有整数中各个数码出现了多少次。(1<=a<=b<=10^12,a, b是整数)考虑[1, x)内各个数码出现了多少次。设f[i][j][k]为以j开头的(i+1)位十进制串中k出现的次数,递推。 也可以简化为f[i],因为每个数码出现的次数相等。本文对两种均给出了实现。[1, x)内的数可分为三类: 1. 位数少于x。 2. 最高位小于x。 3. 和x有公共的前缀。原创 2016-11-07 16:02:29 · 378 阅读 · 0 评论 -
[bzoj 1026] [SCOI2009]windy数:数位DP
题意:区间[a, b]里有多少个不含前导0的十进制整数任意相邻两位之差的绝对值不小于2?(1<=a<=b<=2,000,000,000,a, b是整数)前几天做XJOI模拟赛中有关字典序的一道题,发现可以按照某种顺序从高位向低位统计。十进制数之间的比较,把前导0补齐,实际上就是字符串的比较。举例,如果允许前导0,小于34023的自然数可以这样生成(下划线表示0~9间任意数码):原创 2016-11-07 10:50:39 · 342 阅读 · 0 评论 -
[NOIP 2003] 加分二叉树:DP
题意:定义一棵二叉树的加分是所有结点的加分之和。叶子的加分是它的权值;非叶子结点的加分=左子树加分*右子树加分+根的权值,式中的子树不存在则取1。给定n个结点的权值(n<=30),求所有中序遍历为1, 2, …, n的二叉树的最大加分,并输出其前序遍历。同一个中序遍历可能对应着很多棵二叉树。怎样确定一棵呢?加括号。原创 2016-10-25 19:58:42 · 596 阅读 · 0 评论 -
[USACO Training] Section 2.3
本节全是题目,有三道DP、一道枚举和一道搜索。原创 2016-08-22 10:27:49 · 357 阅读 · 0 评论 -
[NOIP 2014] 飞扬的小鸟:需要一点小优化的DP
这不是水题?啊,写完了。等等,可以连击??!连击也好处理。用同一列的更新自己就好。啊,又快写完了。等等,我这样倒着推,又用的是滚动数组,好像难以确定游戏失败时最多飞越多少个管道间隙……嗯,重写。WA,70分,挂成暴力DP了。让我来面向数据调试……为了省一个循环,我竟然同时更新向上、向下……改正。CE两次。咦,怎么还是70分?这次WA的测试点有所不同。原创 2016-09-12 20:49:04 · 479 阅读 · 0 评论 -
[bzoj 1222] [HNOI2001]产品加工:状态的定义很有趣的DP
题意:有两台机器A、B和n个任务(n<=6000),每个任务至少有一种选择:在A上完成、在B上完成、同时在A和B上完成,每种方式有各自的时间,时间是不大于5的正整数。求完成所有任务的最小总时间。事先知道这道题可以用DP做。一开始,我觉得同时在A和B上完成不好处理。简化一下,问题变成把所有任务分成两类,使两类总时间较大的那个较小。可以用网络流……但是好像难以把问题变回去。怎么定义状态呢?原创 2016-10-12 20:20:53 · 553 阅读 · 0 评论 -
[NOIP 2006] 能量项链:环形DP
题意:《算法导论》上有一道DP例题:矩阵链乘法问题。现在把矩阵链的首尾相接,并让故事发生在Mars星球上,就是本题了。处理环的常用方法:复制两遍。注意递推顺序……在CS的提醒下发现一开始弄错啦……原创 2016-10-12 20:30:04 · 803 阅读 · 0 评论 -
带通配符的字符串匹配:动态规划
CS的模拟赛里有这道题,当时花了40分钟,用记忆化搜索AC了此题。当时由于AK(了三道水题)而感到很得意,没有虚心学习轮廓更清晰的算法实现。今天中国大学先修课计算概论考试的压轴题是这道,没做出来。算是一个教训吧。最终以6道题AC结束了今天的考试。恭喜DYX、WZH、WNX同学AK。原创 2016-10-24 00:22:54 · 8444 阅读 · 0 评论 -
[NOI 2001] 炮兵阵地:状压DP
题意:在一个N*M的矩阵中的空地放两两不能相互攻击的炮兵,两个炮兵能相互攻击当且仅当它们在同行或同列且距离小于等于2,求最多能摆多少。(N<=100,M<=10)据说是状压DP经典题。由于一行至多有10列,所以不妨以两行为状态。直接用二进制表示状态(2^10)不可行,因为合法状态只占少数。但我们可以事先搜出所有合法状态。一个小优化是用位运算判断是否能够转移。原创 2016-11-04 09:09:27 · 344 阅读 · 0 评论 -
[NOIP 2010] 乌龟棋:动态规划
题意:直线上有等间距的N个点,每个点有一个分数,落在一个点上能获得该点的分数。从第一个点跳到第N个点,每次可以向前跳1、2、3、4步,每种步距可以使用的次数有限,且保证用完所有的会跳到第N个点。求最大分数。N<=350,每种步距的使用次数<=40。枚举步距的排列是阶乘级别的,但是,注意到只要每种步距已使用的次数确定,位置就确定了。因此,可以以每种步距已使用的次数为状态。原创 2016-11-04 10:01:03 · 366 阅读 · 0 评论 -
[bzoj 1226] [SDOI2009]学校食堂Dining:状态压缩的奥妙
题意:N个人(N<=1000)排队吃饭,第i个人允许第i+1~i+b[i]个人先吃(0<=b[i]<=7),每个人有口味t[i],做每个人的菜的时间是他的口味和所做的上一个人的菜的口味的函数,不计算第一个人的时间,求最小总时间。没能自己做出来。进行了如下尝试: 1. 设f[i][S]为前(i-1)个人吃了,第i个人没吃,后面7个人状态为S。没有记录最后一个人是谁,无从转移。原创 2016-11-05 16:52:38 · 875 阅读 · 0 评论