![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
文章平均质量分 51
mis_deer
Make_myself.
展开
-
[Hackrank] Prime XOR (计数DP)
Hackrank - Prime XOR 给定N个数,求有多少个不同子集的异或和为质数 其中 N≤105,3500≤ai≤4500N \leq 10^5, 3500 \leq a_i \leq 4500首先异或和不会超过 213−12^{13}-1 然后虽然 NN 很大,但是每个数的范围在1000以内 所以总的不同的数不会很多 所以做法是枚举每种数取了多少个,然后暴力转移即可 刚原创 2017-05-30 18:42:16 · 593 阅读 · 0 评论 -
[HDU 5406] CRB and Apple (双线程DP+树状数组)
HDU - 5406 一棵树上有若干个苹果,每个苹果有一个高度值和美味值 两个人一棵树上从高到底摘苹果,摘到苹果后,可以选择给任意一个人吃,或者扔掉 但是每个人吃的苹果的美味值必须是非严格递增的 问两个人最多可以吃多少个苹果首先按高度先排序,问题就转化为求两个 LIS,使得他们的长度和最大费用流有一个费用流做法,从前向后 D小的向 D大连一条流量为 1的边 每条边费用为 1原创 2016-07-18 19:55:21 · 419 阅读 · 0 评论 -
[Codeforces 697C] PLEASE (矩阵特征向量)
Codeforces - 697C 有三个倒扣着的碗,刚开始钥匙放在中间 之后每次将中间的碗和其他碗交换位置, 交换选择的碗是等概率的 问最后钥匙在中间的概率是多少很容易就写出一个dp式子 然后将转移过程写成矩阵的形式 然后求矩阵的特征值和对应的特征向量 再把初始状态用特征向量表达,最后就能得出概率#pragma comment(linker, "/STACK:1024原创 2016-07-17 21:31:41 · 455 阅读 · 1 评论 -
[HDU 5411] CRB and Puzzle (矩阵加速DP + 前缀和矩阵|等比求和快速幂 )
HDU - 5411 有 N种拼图,其中每种拼图后面只能接给定的几种拼图 问接成不超过 M长度的拼图的方案数是多少普通dp的话被卡时了,并不能过。所以利用矩阵加速。 构造矩阵: [M111]∗[dpiSi−1]\left[ \begin{matrix} M & 1 \\ 1 & 1\end{matrix} \right] *\left[ \begin{matrix原创 2016-07-17 19:56:11 · 651 阅读 · 0 评论 -
[Codeforces 67C] Sequence of Balls (字符串DP)
Codeforces - 67C 给定两个字符串 AA和 BB,要求用四种操作将 AA转化为 BB 其中可以在 AA的任意位置添加、删除或替换任意字符 或者可以交换相邻的两个字符,其中交换两次的代价大于等于添加一次再删除一次由最后一个条件可得,将一个字符连续交换两次及以上是不划算的 因为你可以把它删掉,再在另一位置加入 设 dp[i][j]dp[i][j]表示 AA字符串 ii原创 2016-07-26 11:53:20 · 356 阅读 · 0 评论 -
[SCU 4532] interesting (数论+技巧+SPFA转移DP)
SCU - 4532 a1∗b1+a2∗b2...+an∗bn=Ba_1*b_1 + a_2*b_2 ... + a_n*b_n = B 给定 a1...ana_1...a_n,BmaxB_{max}、BminB_{min} 问有多少个B, Bmin<=B<=BmaxB_{min} <= B <= B_{max}, 使得 b1...bnb_1 ... b_n存在非负整数解首先原创 2016-07-15 08:35:51 · 318 阅读 · 0 评论 -
[HDU 5735] Born Slippy (机智暴力)
HDU - 5735 给定一棵树,要求从这个点到它祖先的链上不要求连续地选若干个点 使得序列中相邻点权的位运算和加上此点点权最大,设这个值为 f[i]f[i] 输出 ∑Ni=1i∗f[i]\sum_{i=1}^N i*f[i]赛上没看这题……赛后一看题解,发现是个暴力,所以果断写了一发 拿与运算举例,首先点权是固定的,所以只要求位运算和最大就好了 设 dp[i]=max(dp[原创 2016-07-22 17:17:54 · 880 阅读 · 0 评论 -
[SCU 4511] 任务 (状态优化DP)
SCU - 4511 给两个机器安排 N个任务,要求满足 1. 任务必须全部被安排到任一机器上 2. 同一时间一台机器只能运行一个任务 3. 任务 j(j<i)j (j < i) 必须在任务 i之前被安排 4. 在一台机器上运行的任务不能被打断 第 i个任务在两台机器上的用时分别为 ai,bia_i,b_i 要求所有任务的总用时最小这题我想了三天三夜,还是没原创 2016-05-23 13:18:29 · 387 阅读 · 0 评论 -
[SCU 4512] Goozy的积木 (状态优化DP)
SCU - 4512 有若干个积木,你可以选择将他放在 A塔,放在 B塔,或者不放 求在两塔高度相等的情况下,所能达到的最大高度朴素的想法是 dp[i][H1][H2]表示使用前 i个积木 A塔高度为 H1,B塔高度为 H2,dp存的是能否到达这个状态的一个 bool值 首先这样状态爆炸,所以依旧要合理调整状态位置 我们可以把最高塔的高度移到 dp存的最优值里, 然后状态里表示一原创 2016-05-23 13:20:26 · 512 阅读 · 0 评论 -
[POJ 3666] Making the Grade (序列DP+离散化)
POJ - 3666 给定一个初始序列,增减其中某些项 使得最终序列非严格递增或非严格递减 求增减量和最小为多少这题 A最多有 1e9,第一反应要先离散化之 这样一来,A最多就只有 2000了 然后就可以 DP了 设 dp[i][j]dp[i][j]为前 ii个数非严格递增,第 ii个数修改为 jj的最小代价 转移方程为 dp[i][j]=min(dp[i−1][0..j]原创 2016-06-10 10:44:53 · 382 阅读 · 0 评论 -
[HDU 5745] La Vie en rose (DP+bitset卡时)
HDU - 5745 给定两个字符串 AA,BB 每次可以将 BB串中相邻的两个字符位置交换 每个字符只能改变一次位置 问通过这样的方式,BB 能在 AA串的哪些位置成为 AA的子串 其中 |A|<=105|A|<=10^5,|B|<=5000|B|<=5000据说 kmpkmp是不行的,据说暴力匹配跑得比谁都快 正解复杂度还是很科学的 首先得出一个 dpdp式子,原创 2016-07-22 10:20:03 · 950 阅读 · 5 评论 -
[HDU 5845] Best Division (xor-trie+dp)
HDU - 5845 给定一段数列,将其划分成最多的段 并且每段长度不超过 L且异或和不超过 X有一个很显然的 (N2)\mathcal{O}(N^2)的dp做法 dp[i]dp[i]表示到 ii为止最多能分成多少段 然后从前面最多 LL个 dp值转移出来 但是对前面 LL个 dp可以用 xor-trie维护一下 这样一来时间复杂度就是 (Nlog(A))\mathcal{O原创 2016-08-17 11:18:49 · 866 阅读 · 0 评论 -
[ZOJ 3747] Attack on Titans (计数DP + 连续至多 + 连续至少)
有三种士兵(G,R,P)组成长度为N的队列 要求其中至少有连续的M个G,至多有连续的K个R 求排列的方案数首先用至多 NN 个的方案减去至多 M−1M-1 的方案 就可以得出至少 MM 的方案 问题就转化为只有连续至多的限制,求方案数 设 dp[i][j]dp[i][j] 表示第 ii 位为 jj 的合法方案数 因为是连续的,而每当限制刚超过的时候就要被减掉 所以对于的 ii原创 2017-05-23 17:21:35 · 516 阅读 · 0 评论 -
[Codeforces 486E] LIS of Sequence (LIS套路)
Codeforces - 486E 给定一个序列,问其中每一个值是否在 LIS上 如果在 LIS上,是否在所有LIS上判断是否在 LIS上,只要正反搞两次 然后把前后的加起来,看是否等于 LIS 判断是否在每一个 LIS 上 只要记录一下前面是 LIS的最大值 然后看是否能接到上面,也是正反各搞一次 感觉这个题挺重要的,今天又碰到一题需要这个作为前提#pragma commen原创 2017-01-21 18:17:03 · 266 阅读 · 0 评论 -
[Codeforces 486E] LIS of Sequence (LIS套路)
Codeforces - 486E 给定一个序列,问其中每一个值是否在 LIS上 如果在 LIS上,是否在所有LIS上判断是否在 LIS上,只要正反搞两次 然后把前后的加起来,看是否等于 LIS 判断是否在每一个 LIS 上 只要记录一下前面是 LIS的最大值 然后看是否能接到上面,也是正反各搞一次 感觉这个题挺重要的,今天又碰到一题需要这个作为前提#pragma commen原创 2017-01-21 18:16:28 · 345 阅读 · 0 评论 -
[Codeforces 484D] Kindergarten (DP + 树状数组优化)
Codeforces - 484D 给定一个长度为 N 的数列,可以将连续的一段分成一组 每组的价值为组内最大值减最小值,数列的价值为所有组的价值和 问整个数列的价值的最大值很容易想到一个 (N2)\mathcal{O}(N^2)的 暴力DP 然后有一个性质,就是每组的最大值最小值一定在边界上 容易证明,如果最值不再边界上,可以向内缩小这个组 把剩余的值让出来给其他组,结果原创 2017-01-21 16:39:45 · 259 阅读 · 0 评论 -
[Codeforces 543A] Writing Code (完全背包DP)
Codeforces - 543A NN 个人写共计 MM 行代码,第 ii 个人每写一行代码就有 aia_i 个bug 问使得 MM 行代码都被写完,并且总 bug不超过 BB 的方案数背包DP…… 太久没写了已经不会写了…… dp[n][m][b]表示当前为第 n个人,还剩 m行代码,b个可容许bug 然后无须枚举当前人写了几行代码,只需要从大到小枚举 m 然后把状态还是更新第原创 2017-01-19 19:18:42 · 271 阅读 · 0 评论 -
[Codeforces 232B] Table (计数 + 背包DP)
Codeforces - 232B 给定一个 N×MN\times M的棋盘,每个格子都可以放一个棋子 问有多少种方案,使得每个 N×NN\times N的区域都恰好有 KK 个棋子 其中 N≤100,N≤M≤1018,K<=N2N\le 100, N\le M\le 10^{18}, K<=N^2由样例很容易看出,每列的棋子具有周期性 即第 xx 列棋子的个数等于第 x+Nx+原创 2017-01-17 15:55:35 · 330 阅读 · 0 评论 -
[HDU 5886] Tower Defence (树形DP)
HDU - 5886 给定一棵树,每条边都有一个权值 定义一条边的战术价值为割去这条边后 剩下的图中最长链的长度 求随机割掉一条边,战术价值的期望题目要求乘以 N−1N-1,所以直接把概率消掉了 所以只要求割去每条边后的最长链长度即可 这就转化为了一个树形dp 首先割去一条边 u−>vu->v 后,最长链可能在 vv 为根的子树中 这个简单地做一次树形dp就能得出原创 2016-09-18 00:36:18 · 802 阅读 · 0 评论 -
[Codeforces 543C] Remembering Strings (状压DP)
Codeforces - 543C 给定 NN 个长度皆为 MM 的字符串,其中 1≤N,M≤201\le N,M\le 20 将第 ii 个字符串的第 jj 为修改成其他字符需要代价 aija_{ij} 要求用最少的代价,使得每个字符串都至少有一位是独一无二的很显然的一个状压DP 首先状压一下哪些字符串已经是独一无二的 由于字符串数量小于可用字母数量,所以总是能自由修改字符原创 2016-08-24 19:31:45 · 435 阅读 · 0 评论 -
[Codeforces 176B] Word Cut (脑洞+KMP+dp)
Codeforces - 176B 给定一个 A串,每次可以将其从分为两个非空子串 然后交换这两个串的位置,得到一个新串 问这样操作 KK次以后得到 B串的方案数实际上可以将 A串看成一个循环的串 每次切的操作实际上就是改变起始位置 并且相邻的两次起始位置不能相同比如 ababaab,我从第一个 b后面切开,就变成 abaab|ab 实际上只不过是换了一个起始位置而已 由原创 2016-08-22 19:07:02 · 337 阅读 · 0 评论 -
[POJ 2836] Rectangular Covering (状压DP)
POJ - 2836 选择若干个矩阵,每个矩阵至少覆盖两个点 问覆盖 N个点所需的矩阵面积和最小是多少状态压缩DP 首先预处理出矩阵能覆盖哪些点,以及矩阵的面积 然后枚举当前要选择的两点,转移方程为 dp[mask] = min(dp[mask], DP(mask|stat[i][j])+sqre[i][j])注意几个坑点:如果两点在平行坐标轴的一条直线上,它依旧是有面积的可以原创 2016-06-05 11:39:08 · 258 阅读 · 0 评论 -
[SCU 4515] 又见背包 (可行性背包DP)
SCU - 4515 有 N个大小不同的数字,第 i种数字为 a_i,每种有 m_i个 求问能否从中选出若干个数字,使他们的和为 K背包九讲 2.0的例题,用多重背包的二进制能过 根据 lyb dalao所述 因为 K<1e5K<1e5,所以其实最后用到的物品数量不会超过 1e5 所以 mi=min(mi,K/ai)m_i = min(m_i, K/a_i),所以用二进制优化能过背原创 2016-05-23 13:33:47 · 383 阅读 · 0 评论 -
[CodeForces 118D] Caesar's Legions (计数DP)
CodeForces - 118D 有 N1个步兵和 N2个骑兵排成一列 其中不能有连续的 K1个骑兵,连续的 K2个步兵 问有多少种排列方式这题计数的我刚开始想得比较复杂 妄图用组合数和排列数给算出来 后来经菊苣提醒,发现有更无脑的做法这种连续序列相关的,事实上可以用计数 DP来做 dp[i][j][k] 表示当前是第 i个士兵,其中用了 j个步兵 而 k如果是 0..K1则表示包括原创 2016-04-15 18:23:44 · 370 阅读 · 0 评论 -
[HDU 1024] Max Sum Plus Plus (DP)
HDU - 1024 定义 dp[i][j] 为取第 i 个数的情况下,前 i 个数组成 j 组 得到的最大和 转移方程为 dp[i][j] = max(dp[i-1][j], max(dp[0..i-1][j-1]) ) + inpt[i] 意思是:考虑第 i 个数,要么把它和第 i-1 个数放到一组 (dp[i-1][j]), 要么另起一组,从0..i-1中转移 (max(dp[0..i-原创 2016-04-07 21:23:12 · 213 阅读 · 0 评论 -
[CQUOJ 21412] 软妹币!软妹币!软妹币! (数学+DP)
CQUOJ - 21412 题意大致是,用若干不同的数中的某些数加减得到 1…n之间的所有数,需要的最少几个不同的数 赛上是找规律做的,虽然过了,但是感觉不太稳,赛后看了题解恍然大悟首先有这样一个事实,如果有 3个数可以表示 1..13 那么对于小于 13的n,答案至多为 3 所以我们可以考虑,用 i个数能够构造出的最大的数是多少设 dp[i]表示 i个数最大能表示 [1, dp[i]]原创 2016-04-07 19:01:35 · 402 阅读 · 0 评论 -
[LightOJ 1030] Discovering Gold (概率DP)
DescriptionYou are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of the cave can contain any amount of gold.Initially you are in position 1. Now each turn you th原创 2016-01-17 23:03:37 · 289 阅读 · 0 评论 -
[LightOJ 1018] Brush (IV) (状压DP)
DescriptionMubashwir returned home from the contest and got angry after seeing his room dusty. Who likes to see a dusty room after a brain storming programming contest? After checking a bit he fou原创 2016-01-17 19:58:38 · 487 阅读 · 0 评论 -
[POJ 1625] Censored! (AC自动机+DP+大整数)
DescriptionThe alphabet of Freeland consists of exactly N letters. Each sentence of Freeland language (also known as Freish) consists of exactly M letters without word breaks. So, there exist exactl原创 2015-11-16 19:50:54 · 579 阅读 · 0 评论 -
[UVA 11762] Race to 1
《训练指南》 P143概率DP,数学问题Dilu have learned a new thing about integers, which is - any positive integer greater than 1 can bedivided by at least one prime number less than or equal to that number. So, h原创 2015-11-02 13:04:04 · 392 阅读 · 0 评论 -
[UVA 10891] Game of Sum
博弈DPThis is a two player game. Initially there are n integer numbers in an array and players A and B get chance to take them alternatively. Each player can take one or more numbers from the left or原创 2015-11-02 13:30:00 · 307 阅读 · 0 评论 -
[POJ 2778] DNA Sequence (AC自动机+DP+矩阵加速)
DescriptionIt's well known that DNA Sequence is a sequence only contains A, C, T and G, and it's very useful to analyze a segment of DNA Sequence,For example, if a animal's DNA sequence contains seg原创 2015-11-16 19:00:12 · 393 阅读 · 0 评论 -
[CQUOJ 21448] 会做题的兔兔 (数学+DP)
题意大意是有一个整数,可以用若干个 2的 n次幂累加得到,问一共有多少种累加方案 统计方案的题,最重要的是做到不重复,不遗漏 dp[i][0]表示构成 i中不含 1的方案有多少种 dp[i][1]表示构成 i中含 1个 1的方案有多少种 dp[i][2]表示构成 i中含 1的方案有多少种 最后答案是 dp[N][0] +dp[N][2] 思路如下: 1) 如果 i是奇数,那么必然要有原创 2016-04-07 19:08:59 · 230 阅读 · 0 评论 -
[CodeForces 566F] Clique in the Divisibility Graph (记忆化搜索)
CodeForces - 566F 一个集合,如果其中两个数能一个能整除另一个,那么他们就具有双向的关系 问最大的相容集有多大刚开始我把一个数之前有多少个因子存了下来 然后再枚举因子去求 编程复杂度爆炸,时间复杂度爆炸后来才知道,其实反过来考虑就好了 dp[i] 表示第i个数之后有多少个以它为因子的 然后不断翻倍,判断其倍数是否在集合中 然后记忆化搜索即可#include <cstdi原创 2016-04-15 17:09:01 · 316 阅读 · 0 评论 -
[SCU 4513] 先锋看烟花 (数据结构优化DP)
SCU - 4513 一条路上有 N个房子,一共有 M个烟花 在 tit_i时刻,第 aia_i个房子会放一个价值为 bib_i的烟花 对在 cur位置的先锋会产生 bi−abs(ai−cur)b_i-abs(a_i-cur)的幸福度 其中幸福度可以为负数 先锋每个单位时间最多可以移动 D的距离 问所有烟花放完之后,先锋的幸福度最大为多少首先朴素的想法是暴力模拟这原创 2016-05-23 13:25:17 · 746 阅读 · 0 评论 -
[SCU 4510] TaoSama与煎饼 (序列DP+状态优化)
SCU - 4510 一条长度为 N的道路,其中每个点有个权值 有 M个道具,能使煎饼向前跳跃1、2、3或4步 保证所有道具使用完时,煎饼落在 N位置 求到 N位置的一条路径,使得煎饼沿路获得的权值和最大首先朴素的想法是用 dp[i][m1][m2][m3][m4] 表示煎饼在 i位置,使用 +1、+2、+3、+4的道具数目 分别为 m1、m2、m3、m4所获得的最大权值原创 2016-05-23 13:06:53 · 299 阅读 · 0 评论 -
[HDU 5288] OO's Sequence (序列DP)
HDU - 5288 定义 f(l,r)f(l,r)为区间内不被其他数整除的数的个数 求所有区间f(l,r)f(l,r)的和可以计算第 ii个数对于答案的贡献 在某个区间 [i−L,i−R][i-L, i-R]内,第 i个数不被其他数整除 设这个向左延伸的最大距离 LL,向右最大距离 RR 则答案就为 ∑Ni=1Li∗Ri\sum_{i=1}^N {L_i*R_i} 以计算 LL原创 2016-06-09 15:25:15 · 290 阅读 · 0 评论 -
[POJ 1795] DNA Laboratory (状压DP)
POJ - 1795 求出一个最短的字符串,使其包含所有给定的 N个字符串 并输出字典序最小的那一个首先把字符串中相互包含的去掉 要注意特判两个字符串相等的情况 然后预处理出两个字符串相接最短需要增加的长度 然后状压DP,dp[i][mask]dp[i][mask]表示 当前末尾字符串是 i,已用字符串集合为 mask 然后输出的时候尽量先输出字典序最小的即可#pragma c原创 2016-06-08 14:12:07 · 619 阅读 · 0 评论 -
[CodeForces 279C] Ladder (DP)
CodeForces - 279C 给定一个序列,问序列中一段区间是否是山峰形状的 山峰形状即为中间有个最大值,然后向两边非严格递减第一反应是想着处理出中间峰向两边延伸的最远距离 然后用三分搜索找峰 但是三分搜索在整数区间上存在诸多坑点 而且在区间非单峰的时候存在一些不确定因素 所以没写好,挂了很多发后来看了题解,发现其实只要处理出两边山脚能向内延伸的最远距离 然后加起来看是否原创 2016-04-24 16:18:46 · 523 阅读 · 0 评论 -
[ZOJ 3682] E - Cup 3 (背包DP计数 + 滚动数组)
ZOJ - 3682 有S1S_1个球迷支持巴萨,S2S_2个球迷支持皇马 球场有NN个方阵,每个可以坐 kik_i个球迷 安排球迷使得一个方阵要么全是支持巴萨的 要么全是支持皇马的,要么两种相等 问有几种安排方案其实一看NN最多只有200,但是S1和S1和S2$很大,我第一反应是离散化 然后就开了一个 map,结果依旧是爆空间了 (这题空间只有 65M) 所以只好原创 2016-04-29 23:01:39 · 315 阅读 · 0 评论