![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
—————dp—————
文章平均质量分 61
w4149
无
展开
-
Tree (树上期望dp)
Tree11.2 和 11.311.2考虑1个随机过程,第1次走到u号点的时间可以分成两部分,第1部分是从1号点随机游走第1次走到u的父亲p的时间,第2部分是从p开始走,第1次走到u的时间,由期望的线性性,第1次走到u的时间期望等于这两部分期望的和。第1部分是一个子问题,我们考虑怎么解决第2部分,我们把这个问题变成1棵树(并且根节点脑袋上也有1条边),从根节点开始随机游走,走出这棵树期望的时间,我们原创 2017-11-03 16:32:10 · 1060 阅读 · 0 评论 -
mine (dp)
10.3mine思路: 简单dp#include <cstdio>#include <cstring>#define LL long long #define N 5000010const LL mod = 1e9 + 7;int len;char s[N];LL f[N][5], ans = 0;//5种状态 0:以0结尾 1:以*1结尾 2:以1结尾(1前无*) 3:原创 2017-10-03 20:44:58 · 304 阅读 · 0 评论 -
BZOJ 1296 粉刷匠 (dp)
1296: [SCOI2009]粉刷匠Time Limit: 10 Sec Memory Limit: 162 MB Descriptionwindy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子原创 2017-10-02 20:53:53 · 283 阅读 · 0 评论 -
clique (dp)
clique10.2思路: 数据结构维护dp#include <cstdio>#include <algorithm>#include <cstring>#define N 200010#define inf 1000000010#define LL long longusing namespace std;int n, ans = 0;int f[N], c[N], vis[N];原创 2017-10-02 16:58:15 · 219 阅读 · 0 评论 -
ZOJ 3329 One Person Game (期望DP)
One Person GameThere is a very simple and interesting one-person game. You have 3 dice, namely Die1, Die2 and Die3. Die1 has K1 faces. Die2 has K2 faces. Die3 has K3 faces. All the dice are fair dice,原创 2017-08-27 16:36:14 · 301 阅读 · 0 评论 -
Birthday (背包dp)
10.901背包和完全背包的结合体,可以两个都跑一遍,但是相互关系要搞清楚。 我的做法是这样的, Dp[i][j][0/1]表示前i件商品花费了j的代价的代价时能得到的最多的糖果数,0表示这件商品还没有被买过,1表示这件商品已经买过.dp[i][j+w[i]][1]=max(dp[i][j][1]+a[i],dp[i][j+w[i]][1]); dp[i][j+w[i]][1]=max(dp[原创 2017-10-09 15:48:38 · 233 阅读 · 0 评论 -
chess (状压dp)
10.9状压,用状态s表示一行中填过的地雷的状态。将每一行能填的数字压缩为一个状态T,我们需要枚举T的子集。 枚举子集代码如下: for(inti=T;; i=(i-1)&T)#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define N 13原创 2017-10-09 14:15:01 · 213 阅读 · 0 评论 -
Road (拓扑序dp)
10.9跑dp的同时也要跑拓扑排序,dp[i]表示从一个入度为0的点到i位置的最大分数。然后将i之后的点全部入度减1,接着进行dp。#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#include<queue>#define LL long long #d原创 2017-10-09 14:14:02 · 372 阅读 · 0 评论 -
CodeVs 1746 贪吃的九头龙 (树型dp 多叉转二叉)
1746 贪吃的九头龙 2002年NOI全国竞赛时间限制: 2 s 空间限制: 128000 KB题目描述 Description 传说中的九头龙是一种特别贪吃的动物。虽然名字叫“九头龙”,但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头因衰老而自己脱落。 有一天,有M 个脑袋的九头龙看到一棵长有N 个果子的果树,喜出望外,恨不得原创 2017-10-16 21:23:40 · 432 阅读 · 0 评论 -
BZOJ 2037 Sue的小球 (基于未来状态的区间dp)
2037: [Sdoi2008]Sue的小球Time Limit: 10 Sec Memory Limit: 64 MB DescriptionSue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船。然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一个秘密武器,只要她将小船划到一个彩蛋的正下方,然后使用秘密武器便原创 2017-10-17 20:35:24 · 254 阅读 · 0 评论 -
BZOJ 1962 模型王子 (猜数问题 dp)
1962: 模型王子Time Limit: 10 Sec Memory Limit: 64 MB DescriptionInput 输入数据共一行,两个整数N,K,用一个空格隔开,具体意义如题目中所述。Output输出数据共一行,为最少所需要的时间S。Sample Input5 3 Sample Output5HINT对于全部的数据,1 < = K < = 100,1 < = N < =原创 2017-10-17 21:14:16 · 327 阅读 · 0 评论 -
parenthesis 括号匹配 (区间dp)
【parenthesis题解】10.17思路: 经典的括号匹配题目,考虑用动态规划来统计方案数。 不妨有dp(l,r)表示只考虑(l,r)区间的括号序列,最终合法的方案数(允许删空) 转移显然只有两种决策,第l个括号不进行匹配(删除),转移到dp(l+1,r),和第l个括号进行匹配, 直接进行暴力枚举匹配即可。 复杂度O(n3)#include <cstdio>#include <cst原创 2017-10-17 19:24:34 · 286 阅读 · 0 评论 -
shopping 购物 (树型dp)
【shopping题解】10.17思路: 考虑用树上动态规划来解决问题。 设f[u][k]表示以u为根的子树买k个物品的最小花费,且物品u使用了优惠卷; 设g[u][k]表示以u为根的子树买k个物品的最小花费,且物品u不使用优惠卷; 假设v是u的一个儿子结点,那么状态转移方程为: f’[u][i + j] = min(f’[u][i + j], f[v][j] + f[u][i]); f原创 2017-10-17 19:22:19 · 279 阅读 · 0 评论 -
fireworks 烟花 (单调队列dp)
fireworks题解10.17思路: 首先设dp[i][j]为到放第i个烟花的时候站在j的位置可以获得的最大快乐值。 那么我们可以很容易写出转移方程: dp[i][j] = max(dp[i - 1][k]) + b[i] - |a[i] - j|,其中max(1, j – t * d)<=k<=min(n, j+t * d) 。 不过我们可以发现b[i]是固定的,那么我们转化为求所有|a原创 2017-10-17 19:18:30 · 365 阅读 · 0 评论 -
BZOJ 2436 Noi嘉年华 (dp)
2436: [Noi2011]Noi嘉年华Time Limit: 10 Sec Memory Limit: 128 MB DescriptionNOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办。每个嘉年华可能包含很多个活动,而每个活动只能在一个嘉年华中举办。 现在嘉年华活动的组织者小安一共收到了 n个原创 2017-09-21 14:57:25 · 365 阅读 · 0 评论 -
BZOJ 4993 Why Did the Cow Cross the Road II (dp)
4993: [Usaco2017 Feb]Why Did the Cow Cross the Road IITime Limit: 10 Sec Memory Limit: 256 MB Description上下有两个长度为n、位置对应的序列A、B, 其中数的范围均为1~n。若abs(A[i]-B[j])<= 4,则A[i]与B[j]间可以连一条边。 现要求在边与边不相交的情况下的最大的连原创 2017-09-29 16:37:13 · 235 阅读 · 0 评论 -
Gray (dp 或 乱搞)
10.10思路 用dp[i][0/1]表示前i位在第i位时能得到的最大分数。标解:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 200010;int n, a[N];char s[N];int f[N][2];int main(){ freopen(原创 2017-10-10 20:49:59 · 201 阅读 · 0 评论 -
Hotal (巧妙地dp设计)
10.10思路: 很明显能看出是dp,但是如果把dp函数定义成前i个房间有j的人就很难处理,这道题有种很好的解法是想象相邻房间都添加一个通道,然后将dp函数定义成通道经过的人的个数,知道前一个通道经过的人数和当前房屋的人数,就可以根据处理后房屋人数为0 4 7三种状态来更新之后的一条通道经过的人数以及代价。#include <iostream>#include <cstdio>#include原创 2017-10-10 20:52:47 · 690 阅读 · 0 评论 -
Gift (单调队列优化dp)
10.10思路: 很明显得状态定义以及转移关系 Dp[i][j]表示前i个人装饰前j个单位能得到的最大魅力度 Dp[i][j]=max(dp[i-1][k]+(j-k)*w);(k+1<=原始位置<=j) 经过变形,可以得到dp[i][j]=max(dp[i-1][k]-k*w)+j*w,对于每一个dp[i][j]来说,j是常量,而k是变量,故将dp[i-1][k]-k*w部分求max,而且原创 2017-10-10 20:54:21 · 280 阅读 · 0 评论 -
Hanoi 多汉诺塔问题 (dp)
Hanoi11.3类比只有三个柱子的汉诺塔, 设f[i][j]为有i个盘子j个柱子时的最少步数. 那么肯定是把一些上面盘子移动到某根不是j的柱子上, 然后把剩下的盘子移动到j, 然后再把上面的盘子移动到j. 于是就有递推式f[i][j] = min{f[k][j] * 2 + f[i - k][j - 1]}.#include <cstdio>#include <iostream>#includ原创 2017-11-03 14:25:39 · 541 阅读 · 0 评论 -
基因的庇护 (AC自动机 dp)
基因的庇护10.25思路: 一道比较典型的AC自动机上DP,只不过需要分析一下性质。 由于每个位置都需要被庇护序列覆盖到,用dp[i][j][k]表示链长为i,在AC自动机上的j号点,当前链上倒数第k个位置是最左的没有被覆盖到的位置时的方案数。预处理出AC自动机上每个结点表示的串的最长的有庇护效应的后缀长度,转移时就看这个长度是否大于等于k+1,若大于等于则说明倒数第k个位置能被覆盖到了,即转移原创 2017-10-25 20:40:36 · 238 阅读 · 0 评论 -
星空 (状压dp)
星空10.24思路: 链接#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#define INF 0x3f3f3f3f#define N 40010#define P 18using namespace std;int n, k, m, cnt = 0原创 2017-10-24 21:30:50 · 417 阅读 · 0 评论 -
lamp 开关灯 (dp)
【lamp题解】10.16考虑每一盏灯究竟选还是不选, 如果某盏灯x被选择了,那么显然在[x −k,x + k]的灯不应该被选择, 否则这次的选择就是无效的。 于是转换为简单的动态规划问题, 令dp(x)表示将前x盏灯全部点亮的最小代价, 枚举每个灯的点亮与否进行转移即可。 即dp[x +2 * K + 1] =min(dp[x + 2 * K + 1], dp[x] + c[x + k原创 2017-10-16 20:23:35 · 407 阅读 · 0 评论 -
game 游戏 (斜率优化dp)
game 游戏10.16思路: f[i][j]表示前i个数分j段并全部获得的最小期望步数 f[i][j] = f[i-1][k] + cal(k+1, i) cal(k+1, i)表示k+1到i这一段分成一个部分并获得的最小期望步数 cal(k+1, i) = singma( (sum[x]-sum[k]) / t[x] ) ( k+1 <= x <= i ) = singma( sum[x原创 2017-10-16 20:22:38 · 621 阅读 · 0 评论 -
work 工作 (dp)
【work题解】思路: dp(i,j,k)考虑了前i件事,同时距离i最近的j件事的状态,k表示最近的做的事距离i的距离。 每次决策只有两种,先取出之间没做的某件事v做了,即 dp[i][j | (1 << v)][v] = min(dp[i][j | (1 << v)][v], dp[i][j][k] + ( (k == 19) ? a[i - v] : calc(a[i - v] , a[i原创 2017-10-16 20:19:30 · 250 阅读 · 0 评论 -
BZOJ 3594 方伯伯的玉米田 (二维树状数组优化dp)
3594: [Scoi2014]方伯伯的玉米田Time Limit: 60 Sec Memory Limit: 128 MB Description方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。 这排玉米一共有N株,它们的高度参差不齐。 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。 方伯伯可原创 2017-10-16 17:07:42 · 330 阅读 · 0 评论 -
BZOJ 4197 寿司晚宴 (状压dp)
4197: [Noi2015]寿司晚宴Time Limit: 10 Sec Memory Limit: 512 MB Description为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴。小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴。 在晚宴上,主办方为大家提供了 n−1 种不同的寿司,编号 1,2,3,…,n−1,其中第 i 种寿司的美味度为 i+1 (原创 2017-10-18 10:04:04 · 309 阅读 · 0 评论 -
BZOJ 4565 字符合并 (区间状压dp)
4565: [Haoi2016]字符合并Time Limit: 20 Sec Memory Limit: 256 MB Description有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字 符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。Input第一行两个整数n,k。接下来一行长度为n的01串,表示初始串。接下来2k原创 2017-10-31 21:43:23 · 387 阅读 · 0 评论 -
BZOJ 3566 概率充电器 (树形 概率DP)
3566: [SHOI2014]概率充电器Time Limit: 40 Sec Memory Limit: 256 MB Description著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器: “采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧! ” SHOI 概率原创 2017-10-13 19:25:49 · 239 阅读 · 0 评论 -
CodeVs 2245 股票趋势 (二维线段树 zkw)
2245 股票趋势10.30 时间限制: 2 s 空间限制: 128000 KB题目描述 Description 彭先生任职于证券公司,是一位股票分析师。公司经理认为目前的股票分析软件仍可再改进,希望彭先生再设计一套更准确的软件。近日來,彭先生埋头钻研,他发现过去的研究结果,有人提到,如果能在历史资料中,找到与近期股票走势相近的样型,即可使用此历史样型的交易策略,做为近期的买卖策略。为了验证原创 2017-10-30 20:12:13 · 361 阅读 · 0 评论 -
蚊子 (树形期望dp)
蚊子(mosquito)10.26首先每只蚊子的贡献是独立的.如果一只蚊子经过了k个会被灭蚊器影响的点那么这个蚊子对答案的贡献是1-(1-p/q)k. 用1遍bfs求出哪些点是被灭蚊器影响的点.然后进行不同的处理. n为树的点数,m为叶子节点数. 算法1: 对于每一只蚊子,做一遍bfs,O(m2)次bfs,复杂度O(nm2),期望得分10分 算法2: 通过一次bfs我们可以统计出一个叶子原创 2017-10-29 18:17:59 · 522 阅读 · 0 评论 -
兔子 (dp)
兔子(rabbit)10.26第1,2个测试点: O(n!). STL中的next_permutation()就可以得到这20分 第3,4个测试点: O(n!)打表,O(1)回答. STL中的next_permutation()跑个几分钟就出来了 第5,6,7个测试点: O(2n*n2)状压DP,f[S][i][0/1]表示已经使用了数字集合S中的数字,最后一个数字是i,最后一个数字比倒数原创 2017-10-29 18:12:38 · 311 阅读 · 0 评论 -
matrix (dp)
10.4思路: 神奇dp f[i][j]表示处理到前i列(保证前i列合法:被完全包含的区间中已经放了1,没有完全包含的区间中有j个不放(有j列在i的右侧放1)(且没有被完全包含的左区间中一定不放1) 对于所有的左区间,我们只在扫到它的l时处理(加个1进去),而对于右区间我们可以有选择的处理 #include<cstdio>#include<cstring>#include<algorith原创 2017-10-04 20:45:14 · 260 阅读 · 0 评论 -
saber (线段树维护dp)
saber出题人的题解: 20分做法: 大暴力 40分做法: 把食物以时间排序,f[i]表示吃到第i种食物时的最大分数。判断两种食物能否续接,复杂度O(n^2) 100分做法: 发现两种食物之间可以转移,当且仅当 |pi-pj| <= (ti-tj)/2 展开之后就是: 2 * ti-pi >= 2 * tj –pj || 2 * ti+pi >= 2 * tj+pj 于原创 2017-10-06 14:18:05 · 352 阅读 · 0 评论 -
BZOJ 1072 排列perm (状压dp)
1072: [SCOI2007]排列permTime Limit: 10 Sec Memory Limit: 128 MBDescription 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0)。例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种。Input 输入第一行是一个整数T,表示测试数据的个数,以下每行一组s和d,中间用空格原创 2017-09-12 16:56:22 · 300 阅读 · 0 评论 -
来自风平浪静的明天 (记忆化搜索 dp)
来自风平浪静的明天【题目描述】 冬眠了五年,光终于从梦中醒来。 千咲、要,大家都在。 隐约记得“昨天”的海船祭,爱花意外成为贡女,沉入海底。 海面冰封,却有丝丝暖流在冰面之下涌动。 此时,爱花沉睡在祭海女神的墓地。她的胞衣在一点点脱落,化作一簇簇暖流,夹杂着她的感情,向海面上涌去。 爱花,你在哪里? 五年之后,纺已经成为海洋学研究科的大学生。 在纺的帮助下,光得知了海面下海流的情况。原创 2017-09-18 08:48:24 · 575 阅读 · 0 评论 -
BZOJ 1087 互不侵犯King (状压dp)
1087: [SCOI2005]互不侵犯KingTime Limit: 10 Sec Memory Limit: 162 MBDescription 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子。Input 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N *原创 2017-07-04 21:13:26 · 261 阅读 · 0 评论 -
BZOJ 1264 Match 基因匹配 (dp 树状数组优化)
1264: [AHOI2006]基因匹配MatchTime Limit: 10 Sec Memory Limit: 162 MB Description基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱基在该序列中正好出现5次!这样如果一个DNA序列有N种不同的碱基构成,原创 2017-07-02 11:52:58 · 349 阅读 · 0 评论 -
NOIP 2015 Day 2 substring 子串(字符串 dp)
【NOIP2015】子串有两个仅包含小写英文字母的字符串 AA 和 BB。 现在要从字符串 AA 中取出 kk 个互不重叠的非空子串,然后把这 kk 个子串按照其在字符串 AA 中出现的顺序依次连接起来得到一个新的字符串。请问有多少种方案可以使得这个新串与字符串 BB 相等?注意:子串取出的位置不同也认为是不同的方案。输入格式 第一行是三个正整数 n,m,kn,m,k,分别表示字符串 AA 的长原创 2017-07-02 09:39:33 · 1052 阅读 · 1 评论 -
BZOJ 1835 base 基站选址(DP 线段树)
1835: [ZJOI2010]base 基站选址Time Limit: 100 Sec Memory Limit: 64 MB有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di。需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci。如果在距离第i个村庄不超过Si的范围内建立了一个通讯基站,那么就成它被覆盖了。如果第i个村庄没有被覆盖,则需要向他们补偿,原创 2017-07-02 09:19:24 · 339 阅读 · 0 评论