![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
文章平均质量分 76
lleozhang
这个作者很懒,什么都没留下…
展开
-
noip 模拟赛 正睿oi(一) 给
给 (ca.pas/c/cpp)【背景描述】对于任意1 ≤ k ≤ N, 求有多少个左右区分的恰有k个叶子节点的二叉树, 满足对于每个节点要么没有叶子节点要么有两个节点, 同时不存在一个叶子节点, 使得根到它的路径上有不少于M条向左的边。你只需要求出答案对998244353取模的结果。 【输入格式】输入共一行,两个正整数M, N。 ...原创 2018-07-24 16:52:13 · 2268 阅读 · 0 评论 -
bzoj 1495
这是一道...卡了我一个月的树形dp...我真是太弱了...其实仔细想想,这题的核心思路并不是特别复杂,但是的确存在不小的难度作为一个看过全网基本所有题解+标程才弄明白这题到底怎么回事的蒟蒻,我努力把所有东西揉到一起让各位看官一眼看懂...首先我们简化一下题意:给定一棵满二叉树,每个叶节点有一个状态(0,1),任选两个叶节点,如果这两个叶节点状态相同但他们的LCA所管辖的子树中的与...原创 2018-10-29 20:30:42 · 146 阅读 · 0 评论 -
noip 2018模拟赛2018.10.29 T2 obelist
又是一道玄学题...题解:看到数据范围,显然是状压dp那么我们来设计一下状态设dp[i]表示目前选择的点集为i所能获得的无环子图个数那么如果要求无环,这还是个有向图,所以我们可以将新的子图按拓扑序分层,然后枚举每一层的状态进行转移所以最浅显的思想就是记录整个点集的状态,同时记录最底层的状态,然后用最底层的状态进行转移,转移时只要求新的层与底层均有连边即可但是这样做时...原创 2018-10-29 21:08:07 · 250 阅读 · 0 评论 -
CF939F
好神奇的dp...首先有一个很简单的思想:设dp[i][j]表示目前到了第i分钟,朝上的面被烤了j分钟的情况下所需的最小交换次数那么有转移:dp[i][j]=min(dp[i-1][j],dp[i-1][i-j]+1)这一点很好理解,就是讨论现在向上这面上一分钟的状态:如果上一分钟这一面也朝上,那么就直接继承,如果上一分钟这一面朝下,那么就要翻一次,同时之前朝上的面的被烤的时间就是i-...原创 2018-10-31 15:53:55 · 243 阅读 · 0 评论 -
CF1065D
如果不喜欢过长代码的看官,请移步其他题解...这题其实思想极其简单:棋盘问题常见的算法都比较暴力,常用的有搜索和状压dp而这道题显然没啥能状压的,所以我们考虑搜索但是仅仅搜索是不够的,因为有极大的可能搜到死...所以我们引入记忆化设状态f[i][j][k][0/1/2]代表目前在点(i,j)处,上一个到达的点(注意是达成要求而非经过)的编号为k,目前的棋子种类为1/2/3时...原创 2018-10-30 16:35:05 · 165 阅读 · 0 评论 -
CF1015F
玄学字符串dp...题意:给定一个括号序列,求长度为2n的合法的括号序列的个数(要求每个被统计的合法序列中均至少有一个子串为给定的括号序列)题解:这题没有想的那么复杂,就是暴力的一个dp首先我们设状态f[i][j][k][0/1]表示当前放到了第i个括号,前i个括号中左右括号个数差为j,已经放好的括号中长为k的部分能与s相匹配,0/1表示之前是否存在与s能匹配上的一整个子串那么...原创 2018-10-30 20:35:26 · 171 阅读 · 0 评论 -
bzoj 1076
发现自己已经把期望dp忘光了...其实本质上非常简单,就是利用状压的思想跑期望首先很容易设计出状态:记状态f[s][i]表示到了第i个点,之前已选过的点的状态为s时所能获得的最大期望得分但是会发现这样做没法转移(你可以试一下,我做了半个点做得原地爆炸)但是我们知道,期望dp常见的策略是从后向前,逆向转移所以我们修改一下状态:记状态f[s][i]表示到了第i个点选的点集为s时,i...原创 2018-11-03 08:07:31 · 169 阅读 · 0 评论 -
bzoj 3191
非常好的一道题看到这道题,肯定能想到概率dp,但是状态的设计与转移都是一个难点如果正向模拟来设计状态,那么不难发现是很难以转移的所以我们考虑反向模拟,用类似博弈的方法来转移不难发现,如果只剩了最后一个人,那么这个人获胜的概率是1而如果只剩两个人,我们完全可以通过摸牌的情况算出每个人的胜率(这里的胜率是先手和后手之分)而如果剩三个人,我们发现通过摸牌会先淘汰一个人,然后就变成...原创 2018-11-06 08:15:30 · 157 阅读 · 0 评论 -
bzoj 1222
比较简单的背包dp,设计状态f[i][j]表示到了前i个物品,第一台机器加工时间为j,第二台机器加工所用的最小时间,然后背包转移即可本题卡空间,需要滚动数组优化本题卡时间,稍微卡下常就行#include <cstdio>#include <cmath>#include <cstring>#include <cstdlib>#in...原创 2018-11-03 16:14:21 · 181 阅读 · 0 评论 -
bzoj 4011
看了好多篇题解才看懂的题,我实在太菜了...首先根据一个我不知道的算法,可以证明在没有加入新的边的时候,原图的所有生成树的方案数就是所有点(除1以外)的度之积那么在新加入这条边之后,我们仍然可以这样计算,但是会产生一种问题:就是会出现环!所以我们需要利用一些容斥,把不合法的情况去掉接下来我们考虑如何算出不合法的情况由于原图是一个有向无环图,所以在原图中怎么选都不会出现环,所以多...原创 2018-11-06 09:41:21 · 183 阅读 · 0 评论 -
CF979E
非常好的dp,非常考dp的能力很显然是个计数问题,那么很显然要么是排列组合,要么是递推,这道题很显然递推的面更大一些。那么我们来设计一下状态:设状态f[i][j][k][p]表示目前到了第i个点,这i个点中有j个白点是奇数条好的路径的结尾,k个黑点是奇数条好的路径的结尾,p个白点是偶数条好的路径的结尾的方案数可能这个状态本身不是特别好懂,我们详细解释一下:这样的图的个数会...原创 2018-11-02 15:23:59 · 460 阅读 · 0 评论 -
noip 2018雅礼模拟赛day2 T1
非常有趣的dp...记dp[i]表示更新到了i且i不变的最小代价那么可以推知,dp[i]可以由之前的dp[j]来更新,如果这样来更新,一定有i~j之间的所有楼房被修改成了相同的高度且这个高度小于i和j的高度那么我们可以进行转移:其中t为j~i之间楼房被修改成的高度发现要枚举的t其实是一个二次函数的形式,于是对他进行化简得:二次函数求最值需要求对称轴,当时取得最小...原创 2018-10-21 21:10:53 · 346 阅读 · 0 评论 -
雅礼 noip2018 day4 T2
好玄学的dp啊....设状态dp[i][j]表示是否存在一条以j为起点,状态为i的路径那么可以枚举j的所有后继节点进行转移,但时间较大,而且比较复杂所以我们利用bitset+meet in the middle进行优化:利用bitset优越的位运算性质,我们可以减少一层循环利用meet in the middle思想,我们可以减小枚举范围算法讲解:我们将d分成d/2和d...原创 2018-10-23 15:13:12 · 333 阅读 · 0 评论 -
bzoj 4007
非常好的树形dp首先,有个很显然的状态:记状态f[i][j]表示以i为根节点的子树中选了j个叶节点作战,那么很显然有转移:f[i][j1+j2]=f[i<<1][j1]+f[i<<1|1][j2]所以我们只需爆搜一发状态,然后每次更新即可但是有个问题:当我们搜到最底层的叶节点时,由于他的贡献与祖先节点有关,所以无法直接更新但是我们发现,n的数据范围非常小,而...原创 2018-10-28 16:00:37 · 171 阅读 · 0 评论 -
CF 494B 【Obsessive String】
很有趣的一道题这道题提议很难懂,其实就是让你求合法的集合数目。合法的集合定义为:1、集合中的所有串都是s的子串,且互不重叠 2、集合中的所有串都含有子串t。看到网上很多题解说要用kmp,但我就不用...因为仅需进行一个字符串匹配,而hash是很好写的匹配啊而且kmp的next指针在dp中并没有起到作用。说一下主体思路吧:设两个字符串为s,t,长度分别为l1,l2首先...原创 2018-08-16 10:02:48 · 218 阅读 · 0 评论 -
01分数规划详析 (洛谷4377)
基本题面:设有n组数据a,b,对于每一组数据,都有选和不选两种状态(设状态为x,选则x=1,不选则x=0),现在欲求出所有选中的数据中,∑a/∑b的最大值。接下来是一些数学问题:设原式最大值为R,R=∑(ai·xi)/∑(bi·xi)若设L为某一种不那么优的选法,则恒有R>=L则:∑(ai·xi)/∑(bi·xi)>=L于是:∑(ai·xi)>=∑...原创 2018-08-29 20:38:44 · 460 阅读 · 0 评论 -
bzoj 1009 GT考试
一道好题,利用kmp维护递推再更新矩阵乘法这题首先可以递推:设状态f[i][j]表示长串更新到了i位置,已经匹配短串匹配了j个数那么我们有转移:f[i][get_nxt(j)]+=f[i-1][j-1]当然,你并不懂这是什么意思我们挨个解释一下主题思想就是在前面放好的j-1个字符的基础上再放一个字符,看看会发生什么首先,这里应用的是kmp的next指针的含义(不会k...原创 2018-09-20 16:08:43 · 184 阅读 · 0 评论 -
CF 833B
互测题T3...首先有个dp是非常好想的:设dp[i][j]为前j个数分成i组的最大得分,则易得:dp[i][j]=max{dp[i-1][k-1]+num[k][j]},其中,num[k][j]表示从第k个数到第j个数不同值的数量而num数组可以预处理出来,时间复杂度O(n^2 k)等等,这样好像过不掉这道题啊我们发现,max{dp[i-1][k-1]+num[k][j]}这...原创 2018-10-02 09:29:07 · 234 阅读 · 0 评论 -
bzoj 4715
其实我并没有见过原题,只是因为...这被改编成了互测题...题目中提到了一个序列,这个序列是很重要的,否则这个问题好像是没有合理的时间复杂度解法的但正因为有了这个序列,这个问题的时间复杂度才让人能够接受序列的特性:逆序对!根据题意,我们发现一个图上所有的连边一定来源于这个序列里的逆序对!那么,如果要求一个点集内部没有连边,内部是不能有逆序对的!那么这个条件等价于求出这个序列...原创 2018-10-02 10:56:20 · 137 阅读 · 0 评论 -
noip 模拟赛之xcj的妹子
【题目背景】众所周知,xcj是个万人迷,拥有迷妹无数。眼红的jdr(太可爱啦!!!)和wly决定建立“仇帅者联盟”,打倒xcj以解除长期以来xcj对妹子的垄断。于是他们制定了一个作战计划...【题目描述】将实验的校园看成是一个n*m的地图,左上角为 (1,1) ,jdr和wly从起点 (1,1) 出发(只能向下或向右走)分别走各自的最短路到达xcj的活动地点 (n,m) 进行刺杀,由于...原创 2018-10-04 09:24:38 · 300 阅读 · 0 评论 -
bzoj 1023
我说这是我们的noip互测题你信吗...首先介绍一下仙人掌(略,参见题面)然后我们思考一下怎么做:首先,如果原图是一棵树,那么做法是很显然的(树上最长链嘛)但是,图是一个仙人掌,所以树上最长链的做法有bug所以我们考虑:是否能将树上的做法移接到仙人掌上即可怎么移接?我们看到,根据仙人掌的性质,如果我们对这个仙人掌搜出一棵dfs树,那么不在环上的边一定是树边如果换一种...原创 2018-10-08 19:42:03 · 324 阅读 · 0 评论 -
2018.10.14 noip模拟赛 超级树
题意:给定一个深度为k的满二叉树,将他的所有节点向这个点的所有祖宗连边,求新生成的这样一棵树中经过一个点最多的路径数目怎么搞?显然是个递推嘛...记状态f[i][j]代表二叉树的深度为i,从中选出j条互不相交的路径的方案数(即这些路径不会经过同一个点超过一次)然后呢?我们会发现,由i变成i+1时,超级树的变化就相当于将两棵深度为i的超级树连到一个根上,然后将所有点与根连边即可...原创 2018-10-15 19:12:03 · 312 阅读 · 0 评论 -
雅礼 noip2018 模拟赛 day3 T3
典型树形dp这里,我们应该看到一些基本性质:①:如果这个边不能改(不是没有必要改),我们就不改,因为就算改过去还要改回来,显然不是最优的注意:“不能改”是指边的性质和要求的相同而不包括对边的颜色没有要求的情况!②:如果我们每翻转一条边,就认为将这条边的两个端点度数+1,那么不难看到,最后翻转的所有边构成的路径总数就是度数为奇数点个数的1/2(性质②的证明:一条路径只会对两端...原创 2018-10-22 20:09:00 · 459 阅读 · 0 评论 -
noip 2018 雅礼模拟赛day1 T2
玄学dp...看见第一个条件会非常自然地按y排序,然后原地炸飞...(当然,zwz大佬除外...)因为第一个条件的可优化点非常少,同时卡时间和空间,所以并不是很好。所以我们先按x来排序,设计状态dp[i][1]表示从i向右射出一条光线,dp[i][0]表示从i向左射出一条光线然后考虑转移:我们从前向后枚举每个点,然后再枚举要射向哪个点,这样时间复杂度控制在O(n^2)因...原创 2018-10-20 12:46:22 · 267 阅读 · 0 评论 -
bzoj 1042
典型的背包+容斥首先,考虑如果没有个数的限制,那么就是一个完全背包,所以先跑一个完全背包,求出没有个数限制的方案数即可接下来,如果有个数的限制,那么我们就要利用一些容斥的思想:没有1个超过限制的方案=至少0个超过限制-至少1个超过限制+至少2个超过限制-至少3个超过限制+至少4个超过限制所以我们用2进制数枚举谁超过了限制,然后加入上面的容斥即可其中:如果第i种硬币的限制为ni,那么...原创 2018-11-06 07:40:27 · 137 阅读 · 0 评论