关于 DP 的一些题目


参考资料

DP

  • Rain and Umbrellas
  • Mr. Kitayuta, the Treasure Hunter
  • Power of String 首先我们最多只会在一种字母中选择部分个,否则要么都选,要么都不选。以及我们一定会把其他字母转化成一种字母。枚举要转化成的字母以及可能选部分的字母,然后就是01背包DP。复杂度\(O(26^3k)\)
  • Fibonacci String Subsequences 对于这类字符串计数DP,一般就要考虑怎么去拼接字符串,DP的状态和字符串的子串有关。\(dp[i][l][r]\) 表示到第 \(i\) 个 Fibonacci 串时,包含了目标串的子串 \([l,r]\) 的子序列的个数。
  • Gerald and Giant Chess 考虑到 \(k=2000\),所以 DP 的状态必然是和障碍物有关的,\(dp[i]\)表示到达第 \(i\) 个障碍物的路径上没有经过其它障碍物的方案数。
  • Buggy Robot \(dp[x][y][i]\) 表示到 \((x,y)\) 这个点,在字符串中走到了第 \(i\) 个位置的最小花费。在 \(BFS\) 中进行状态转移,转移复杂度 \(O(1)\)。
  • Group Projects 学到一个DP姿势。分组计数,\(dp[i][j][k]\)表示到第 \(i\) 个人时,有 \(j\) 个组还是开放的(即可以被选择)不公平的值的和为 \(k\) 时的方案数。关键就是开放的组这一维,枚举 \(a[i]\) ,我们可以去定义他的行为,是独自成组?还是加入别的组?还是新建一个开放的组?还是加入一个组并关闭这个组?显然不同的行为对应不同的状态转移。还有由于我们知道了开放的组的数量\(j\) ,考虑 \((a[i]-a[i-1])*j\) (\(i\neq0\))(\(a\) 数组先排序) ,就是那些仍然开放的组需要加的不公平的值的和。
  • Increase Sequence \(dp[i][j]\) 表示到第 \(i\) 个数时,有 \(j\) 个还未关闭的区间的方案数(这里未关闭的意思是还没有确定区间的右端点)。显然考虑每一个还未关闭的区间,都会给当前点加上 \(1\) ,据此可以推出状态转移方程了。时间复杂度 \(O(n)\)。
  • Sereja and Intervals \(dp[i][j][k]\) 表示到第 \(i\) 个数时,还有 \(j\) 个未关闭的区间,已经关闭了 \(k\) 个区间的方案数。对于每个数,考虑是关闭前面的区间呢(显然只能关闭第一个未关闭的区间)?还是新开一个区间?还是不管这个数。
  • Ducks in a Row 可以发现翻转的区间一定不相交,所以可以考虑 \(DP\)。\(dp[o][i][j][k]\) 表示到 \(o\) 这个位置,前面是否翻转 ( \(i\) ),连续的 \(D\) 的数量为 \(j\) ,符合条件的\(D\)连续段的数量为 \(k\) 时所需的最小翻转次数。因为 \(j*k\leq\)字符串的长度。所以时间复杂度 \(O(n^2)\)。
  • Spinning Up Palindromes \(dp[l][r][i][j]\) 表示 \(S[1...l]\) 等于 \(S[r...n]\) 时从 \(dp[l-1][r+1][i'][j']\) 转移过来,\(l+1\) 是否需要向 \(l\) 进位 (\(i\)) ,\(r\) 从 \(r+1\) 得到的进位为 \(j\) 时的最小花费。转移怎么好写怎么来,大力枚举使得两边相同时要加的数即可。因为 \(l\) 和 \(r\) 具有相关性,所以数组可以写成 \(dp[l][i][j]\)。
  • Eighty seven 考虑前缀后缀,开两个 \(bitset\) 类型的 \(DP\) 数组,以前缀为例,\(dp[i][j][k]\) 表示到第 \(i\) 个数,一定不选 \(j\) 这个位置上的数,选了 \(k\) 个数时所有可能的和(二进制位为\(1\)表示有这样的和)。对于后缀的数组,如果二进制位 \(i\) 上的数字为\(1\),可修改为 \(bit[87-i]=1\),那么对于询问,枚举 \(k\) ,将前缀后缀按位与,检查是否有二进制位为\(1\)。
  • Candy Chain \(f[l][r]\) 表示删掉 \(S[l...r]\) 这个子串能得到的最多的钱。然后 \(dp[i] = max(dp[i-1], dp[j] + f[j+1][i]) (j < i)\) ,\(dp[len(S)]\) 即为答案。预处理 \(f[l][r]\),枚举 \(S\) 的子串 \(s\) 以及所有的待匹配串 \(t\) ,令 \(g[i][j]\) 表示 \(s[1...i]\) 删除一些字符(或不删)等于 \(t[1..j]\) 时得到的最多的钱。\(f[l][r]=g[r][len(t)]\)。也可以用字典树优化,将待匹配串建树,同样枚举子串,然后有 \(g[i][j]\) 表示以 \(i\) 结尾的字符串在字典树上的状态为 \(j\) 时可以得到的最多的钱,\(f[l][r]=g[r][0]\)。有三种转移,要么在字典树上向下走,要么删掉一个区间(可以借助已经计算出的 \(f[l][r]\) 转移),要么删掉 \(j\) 这个状态代表的字符串。
  • Mahmoud and Ehab and yet another xor task 考虑异或集合的性质(对于任意两个数,他们的异或值都在集合中),对于一个数 \(a[i]\) 如果 \(a[i]\) 不在集合中,那么对于集合中的任意数 \(x\), \(a[i]\ xor\ x\) 都不会在集和中。维护一个集合,枚举 \(a[i]\) ,如果发现 \(a[i]\) 已经在集合中,所有数的构成方案数都翻倍,否则把这个数和集合中所有的数分别异或并加入集合。可以发现这样需要离线处理,另一种做法,通过预处理线性基在线回答询问。
  • Compute Power 求最小比率,二分答案 \(x\) ,若存在更优的答案,则有 \(\sum\frac{a_i}{b_i}<x\),判断是否存在 \(\sum{a_i}-x*{b_i}<0\)。先把给的东西按 \(a\) 从大到小排序,考虑 \(dp[i][j][k]\) 表示到第 \(i\) 个时,等于 \(a[i]\) 的数量为 \(j\) ,大于的数量为 \(k\),根据是否选择进行转移。

树形DP

  • Appleman and Tree
  • Counting on Tree
  • Tree Pruning 虽然 \(O(nk^2)\) 可以过,但是有\(O(nk)\)的做法,考虑先预处理出 DFS 序再 DP。
  • Road Improvement 0 没有逆元,所以不能直接除。对于一个结点,他的兄弟结点的方案数的乘积可以通过预处理前缀后缀得到。

状态压缩DP

  • Little Pony and Harmony Chest 状态中0/1表示是否存在某个素数,最多只有17个素因子。
  • Remembering Strings 一维数组,时间复杂度\(O(m2^n)\)。状态中0/1表示某个单词是否变成好记的单词了。
  • Another Sith Tournament \(dp[i][S]\) 表示擂主为 \(i\) 时,活着的人状态为 \(S\) 时主角能获胜的概率,\(dp[0][1]=1\)。时间复杂度\(O(n^22^n)\)。
  • Exciting Finish! 注意到题目求的是有多少种不同的排名,即分数不同排名相同属于同一种情况。又分配的分数呈不下降,所以当我们分配一个分数给某人时,可以当成也给其他未分配的人分配了相同的分数,那么要使一个人的分数变成最大,只需要比较初始分数即可。\(dp[s][i][j]\) 表示人的状态为 \(s\) ,上一次分配的人是 \(i\),还剩下分数 \(j\) 未分配的方案数。记忆化搜索实现。

DP 题集 1的更多相关文章

  1. 数位dp题集

    题集见大佬博客 不要62 入门题,检验刚才自己有没有看懂 注意一些细节. 的确挺套路的 #include<bits/stdc++.h> #define REP(i, a, b) for(r ...

  2. 杭电dp题集,附链接还有解题报告!!!!!

    Robberies 点击打开链接 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱  最脑残的是把总的概率以为是抢N家银行的概率之和- 把状态转移方程写成了f ...

  3. DP 题集 2

    关于 DP 的一些题目 String painter 先区间 DP,\(dp[l][r]\) 表示把一个空串涂成 \(t[l,r]\) 这个子串的最小花费.再考虑 \(s\) 字符串,\(f[i]\) ...

  4. ACM题集以及各种总结大全!

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  5. 2014 HDU多校弟九场I题 不会DP也能水出来的简单DP题

    听了ZWK大大的思路,就立马1A了 思路是这样的: 算最小GPA的时候,首先每个科目分配到69分(不足的话直接输出GPA 2),然后FOR循环下来使REMAIN POINT减少,每个科目的上限加到10 ...

  6. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  7. Codeforces Round #369 (Div. 2)---C - Coloring Trees (很妙的DP题)

    题目链接 http://codeforces.com/contest/711/problem/C Description ZS the Coder and Chris the Baboon has a ...

  8. 4817 江哥的dp题d

    4817 江哥的dp题d  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 已知1-N的排列P的LIS(最长上 ...

  9. 4809 江哥的dp题c

    4809 江哥的dp题c  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 有两个数x,y,一开始x=1,y= ...

随机推荐

  1. 【算法日记】Dijkstra最短路径算法

    上一篇再说广度优先搜索的适合提到了图. 狄克斯拉特算法是在图的基础上增加了 加权图的概念.就是节点和节点之间是有不同距离的 1.算法实例 用Dijkstra算法找出以A为起点的单源最短路径步骤如下 算 ...

  2. Python学习笔记(三十五)—内置模块(4)struct

    摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431955007 ...

  3. Packet Tracer 5.0 构建CCNA实验(3)—— 路由器实现vlan间通信

    --交换机配置 --交换机和路由器连接的接口 switchport mode trunk --路由器配置 enable conf t int fa0/0.1 --路由器接口的子接口 encapsula ...

  4. Codeforces Beta Round #34 (Div. 2) E. Collisions

    E. Collisions time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  5. BestCoder Round #41 记。

    大概整个过程都是很绝望的吧. 发现自己在七点之前是肯定搞不定网了..有冲动跑到机房去打 但是又不喜欢那样的气氛 这可是shi的场呢...好难过啊... 后来..好像是在和lyd讨论怎么把网络复原的过程 ...

  6. 135.Candy---贪心

    题目链接 题目大意:分糖果,每个小朋友都有一个ratings值,且每个小朋友至少都要有一个糖果,而且每个小朋友的ratings值如果比左右邻舍的小朋友的ratings值高,则其糖果数量也比邻舍的小朋友 ...

  7. libuv 一 环境搭建, hello TTY

    引言 - 一时心起, libuv linux 搭建 有一天突然想起来想写个动画. 找了一下 ui 库太大. 后面想起以前弄过的 libuv. 但发现 libuv 相关资料也很少. 所以就有了这些内容. ...

  8. web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示

    这个可以说是很多初学Springmvc的人都会碰到一个令人头痛的问题 那就是为什么我配置好web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示了 我们来看看我们配 ...

  9. POJ 1392 Ouroboros Snake(数位欧拉)

    题目链接:http://poj.org/problem?id=1392 题目大意:题意看的我头痛,其实跟HDU2894差不多,但是这题要求输出这条路径上第k个数,而不是输出路径. 解题思路:也跟HDU ...

  10. csu 1114平方根大搜索(JAVA大小数+二分)

    1114: 平方根大搜索 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 182  Solved: 96[Submit][Status][Web Boar ...