![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
文章平均质量分 54
Nicoleeeee
这个作者很懒,什么都没留下…
展开
-
Codeforces 1487G. String Counting 【dp+容斥】
题意你需要构造一个长度为NNN的字符串,每个字符串最多含某个字符cic_ici,问能构造多少个不含奇回文串的字符串。N≤400,N3<ci≤NN\leq 400,\frac{N}{3} < c_i \leq NN≤400,3N<ci≤N分析考虑cic_ici有下界,所以至多两个字符会超过上界。没有奇回文,就是说串中 sis_isi 和 si−2s_{i-2}si−2 不相同,考虑如果是所有字符都没有上限的话,就是前两个字符有26种填法,后面都是25种填法。根据性质,原创 2021-02-19 20:38:01 · 242 阅读 · 0 评论 -
Codeforces 1461F dp+构造
题意给你一个长度为 NNN 的 aaa 数组,数组里面都是 [0,9][0,9][0,9] 的自然数,允许你添加+++、−-−、∗*∗号,现在你希望式子最大N≤105N \leq 10^5N≤105分析分析一下,只有+++和∗*∗的情况比较麻烦考虑麻烦的点,000的左右两边肯定都是+++号但是111的左右两边,可以是+++,也可以是∗*∗,+++是两边的数都不太大的情况,*是两边的数都大,就需要∗*∗而且可以发现,111的左右两边,肯定是同号的。所以把000作为断点,找到区间[l,r][l,原创 2020-12-14 01:37:12 · 138 阅读 · 0 评论 -
HDU6820 Tree 树形dp
题目描述给你一棵节点数为NNN的无根树,每条边有权值,要求选出一棵联通的图,图里面至多允许有一个度数大于KKK的点,而且要使得边权和尽量大N≤105,0≤k<nN\leq 10^5,0 \leq k<nN≤105,0≤k<n分析我们可以想用树形dp,维护每走到一个点,当前点的度数就可以大于K的最大答案。那么就是当前点可以连边到所有的点,但是与其连边的子树内都不能有度数大于K的点。于是可以用dp[i]dp[i]dp[i]表示iii向所有自己子树连边的最大价值f[i]f[i]f[原创 2020-08-04 22:56:48 · 296 阅读 · 0 评论 -
P4590 [TJOI2018]游园会 dp套dp+lcs
题目描述有两个串,一个模式串,长度为K,一个匹配串(需要自己去凑),长度N,满足以下条件:1.两个串只含“N”、“O”、“I”三种字符2.匹配串不能出现子串“NOI”对于每种匹配串和模式串的最长公共子序列长度 假设为s,求每个s对应多少种不同的匹配串1≤K≤15,1≤N≤10001\leq K \leq 15,1\leq N \leq 10001≤K≤15,1≤N≤1000题解首先我们可以很容易想到一个dp方程,对于匹配串匹配到第i位,对应模式串现在的匹配情况为j,而且NOI在末尾出现的情况为原创 2020-07-11 12:20:08 · 166 阅读 · 0 评论 -
Codeforces 1295F. Good Contest dp+组合数学+概率
题意给你n个区间,[li,ri][l_i,r_i][li,ri],在每个区间里面选整数然后要求选出的整数递减的概率分析很老的套路了,考虑分母就是Πi=1n(ri−li+1)\Pi_{i=1}^{n}{(r_i - l_i + 1)}Πi=1n(ri−li+1)分子的话就是单调递减的dp,右端点+1变成左闭右开离散化之后考虑两个相邻的区间我们怎么选数下一个区间选的数要在上一个的右...原创 2020-01-31 00:15:24 · 385 阅读 · 2 评论 -
Codeforces 1286F. Harry The Potter 子集枚举dp+数学+构造
题目描述给你n个数,你可以进行两种操作1.将一个数-x2.选两个数(不能是同一个),一个-x,一个-(x+1)当然x可能为负数问最少操作次数使得所有数都变为0题解我们考虑性质,如果将一个操作2想成一条无向边,每个数想成一个点的话。结论1:这个图只能有n-1条边,而且不成环如果超过n-1条边,自然用操作1会更好,如果成环,就把成环的全用操作1搞掉,然后剩下的肯定是一棵树,如果有单独...原创 2020-01-27 22:42:10 · 407 阅读 · 0 评论 -
Codeforces 1263F Economic Difficulties dp
题意给你两棵nnn个点的树,一个是从上到下的,一个是从下到上的,最后末尾都有n个叶子结点,分别连向机器,现在你要删除尽量多的边,使得每个机器都和至少一个树的树根相连。且保证树上的点连机器的边是不交叉的n≤1000n \leq 1000n≤1000分析树上的点连机器的边是不交叉的,肯定一个结点子树能够连到的机器是连续的一段区间保证了肯定有一个点使得这个区间覆盖的值最大,就把这些区间变成区间...原创 2019-12-02 19:53:05 · 213 阅读 · 0 评论 -
Codeforces 1225E: Rock Is Push dp+前缀和
题意给你一个地图,你可以推箱子,不能推出界外,问从(1,1)(1,1)(1,1)到(n,n)(n,n)(n,n)的方案数分析一开始看完题目推箱子发现没有什么思路我们抓住性质,如果一个格子,已经有一次从上面把箱子推下来了,就不可能从左边再推过去其实我们走的就是横竖横竖这样的路线再考虑一个问题,我们可以确定一个格子可以从左边过来,但是推了多少个箱子过来,我们是不是要记录一下是从哪个位置开始...原创 2019-10-29 15:37:01 · 309 阅读 · 0 评论 -
2019牛客暑期多校训练营(第八场)
A-All-one Matrices类似极大化思想那样写每一次只要在最低端就开始统计,同意行的也要去重最低端统计的条件是下面那个行的区间更窄或者不包含#include <bits/stdc++.h>#define pb push_backusing namespace std;typedef long long ll;const ll N = 3333;inline ...原创 2019-08-11 16:25:52 · 127 阅读 · 0 评论 -
Codeforces Round #576 (Div. 2)
A扫一遍就好了n*14#include <bits/stdc++.h> using namespace std;typedef long long ll;const int N = 1000010;inline int read(){ int p=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9'){if...原创 2019-07-31 20:00:21 · 108 阅读 · 0 评论 -
2019牛客暑期多校训练营(第五场)
A-digits 2直接n个n拼起来就好了。。。#include <bits/stdc++.h>using namespace std;int main(){ int T ; cin >> T; while(T--){int n; cin >> n; for(int i=1;i<=n;i++) cout<<n; cout<...原创 2019-08-02 20:16:05 · 183 阅读 · 0 评论 -
2019 Multi-University Training Contest 3
Distribution of books这道题模型不熟练所以做不出来首先二分答案,然后就是要分成k段,使得每一段的和小于等于x定义dp[i]dp[i]dp[i]表示前i个最多能分多块满足dp[i]=dp[j]+1(sum[i]−sum[j]≤x)dp[i] = dp[j] + 1 (sum[i]-sum[j] \leq x)dp[i]=dp[j]+1(sum[i]−sum[j]≤x)然...原创 2019-07-30 14:10:41 · 138 阅读 · 0 评论 -
UOJ #110. 【APIO2015】Bali Sculptures dp
题意n个东西,要你连续的分一组,使得所有组都非空,且组数在a到b之间,满足上述条件的前提下使得贡献最小,定义贡献为每组的和,然后全部或起来1≤N≤2000,1≤B≤N,A=11≤N≤2000,1≤B≤N,A=11 \leq N \leq 2000,1 \leq B \leq N,A=1 1≤N≤100,1≤A≤B≤N1≤N≤100,1≤A≤B≤N1 \leq N \leq 100,1 \...原创 2018-05-08 19:27:20 · 196 阅读 · 0 评论 -
UOJ #105. 【APIO2014】Beads and wires treedp
题意在达芬奇时代,有一个流行的儿童游戏称为连珠线。当然,这个游戏是关于珠子和线的。线是红色或蓝色的,珠子被编号为 11到 n。这个游戏从一个珠子开始,每次会用如下方式添加一个新的珠子:Append(w, v):一个新的珠子 w 和一个已经添加的珠子 v 用红线连接起来。 Insert(w, u, v):一个新的珠子 w 插入到用红线连起来的两个珠子 u,v之间。具体过程是删去 u,v 之...原创 2018-05-08 15:59:21 · 199 阅读 · 0 评论 -
AtCoder Regular Contest 067 F - Yakiniku Restaurants 单调栈+差分dp
题意i-1到i的距离为a[i],你可以往两个方向走,然后你有m张票,第i个店用第j张票的美味值是b[i][j],总的开心值=美味值-距离 问总的开心值的最大值 2≤N≤5×1032≤N≤5×1032≤N≤5×103 1≤M≤2001≤M≤2001≤M≤200 1≤Ai≤1091≤Ai≤1091≤Ai≤109 1≤Bi,j≤1091≤Bi,j≤1091≤Bi,j≤109分析...原创 2018-04-14 20:48:14 · 317 阅读 · 0 评论 -
bzoj 3622: 已经没有什么好害怕的了 dp+容斥
题意给你n个a[i]和b[i],需要你把a[i],b[j]配对,使得a[i] > b[j] 的数目比b[j] > a[i]的数目恰好多k,问你组合的方案数,1<=n<=2000,0<=k<=n,a[i],b[j]两两互不相同分析好经典的题啊,首先我们一看到首先想到三个操作 1.这个a=b+k,a+b=n其实可以解出a和b然后变成a[i] ...原创 2018-04-02 19:43:59 · 198 阅读 · 0 评论 -
AtCoder Grand Contest 002 F - Leftmost Ball dp
题意给你n种颜色的球,编号为1到n,每种k个,然后把这些球放到一个序列上,每种颜色的最左边的球变成0,然后问有多少种序列? 1<=n,k<=2000分析首先考虑合法的满足什么性质,正着来的话,一定是0的数量大于等于颜色的数量,这个还满足充分性我们还可以发现一个计数的技巧,就是我们可以把这些序号统一一下,最左边的i肯定放在最左边的i+1的左边,这样我们再乘上n!即可...原创 2018-04-17 19:58:53 · 154 阅读 · 0 评论 -
Codeforces 718E.Matvey's Birthday dp+状态压缩
题意给定一个长度为n的字符串,字符集大小为8。两个点i,j之间有权值为1的边需要满足以下条件至少一个 1. |i-j|=1 2. si=sj求图的直径和多少个有序点对之间的最短路长度等于直径 N≤100000分析首先想到对于每个小写字母建一个虚点,然后再跑 有一个显然的性质,直径不超过15 然后有一个,f[i][j]=min(|i−j|,dist[i][c]+dist[j...原创 2018-04-06 15:30:50 · 184 阅读 · 0 评论 -
bzoj 5287: [Hnoi2018]毒瘤 虚树+dp
题意给你一个图,边数-点数= -1 到10 ,然后求独立集个数分析首先是一棵树的话,我们就可以直接treedp 如果n=m的话,我们可以环套树dp 如果m>n的话,我们首先选择一个这样的做法 把不在生成树的边的两个端点标出来,就有20个点,然后枚举这些点的状态,然后每次跑一遍dp,这样的时间复杂度是O(3k2n)O(3k2n)O(3^{\frac{k}{2}}n),有k组点...原创 2018-04-23 19:14:19 · 249 阅读 · 0 评论 -
UOJ #204. 【APIO2016】Boat dp+组合数学
题意给你n个区间,每个区间可以选的数的范围是[ai,bi]要你求非空上升子序列的个数 n<=500,ai,bi<=10^9分析这道题好题啊,但是我好弱啊 先说部份分,对于每个数我们可以拆成两维,(pos,num),然后就可以dp来做,每一次只把pos和num比较小的累计起来,然后简单的二维dp考虑下正解,肯定是把很多区间给离散化一下,但是这里又害怕取到相同的数,...原创 2018-05-09 14:29:27 · 235 阅读 · 1 评论 -
bzoj3812: 主旋律 dp+容斥
题意给你有向图,问有多少个强联通子图分析经典的计数问题啊,做第二遍了 fs=2s−∑t⊆s,t≠∅2cnts−t×2ways(s−t,t)gtfs=2s−∑t⊆s,t≠∅2cnts−t×2ways(s−t,t)gtf_s =2^s - \sum\limits_{t\subseteq s,t\not= \emptyset}2^{cnt_{s-t}} \times 2^{ways(s...原创 2018-04-25 19:21:43 · 197 阅读 · 0 评论 -
UOJ #181. 【UR #12】密码锁 背包
题意给你个竞赛图,和几条有向边的定向的概率,其余的边的定向的概率都是0.5,求出期望强连通数分析先考虑m=0的情况: 竞赛图缩点之后,就剩一条链 然后对于这样的一条链,有两种算法可以求出强连通数期望: 一个是枚举链最后的一个强连通分量的大小: f[n]=∑i=1nf[n−i](ni)g[i](12)i(n−i)f[n]=∑i=1nf[n−i](ni)g[i](12)i(n−...原创 2018-05-04 17:21:21 · 241 阅读 · 0 评论 -
Codeforces 613D. Kingdom and its Cities 虚树+dp
题意给你很多个询问,每个询问给你很多个关键点,问至少删除多少个非关键点,可以使所有关键点两两不连通分析首先建出虚树,对于虚树treedp一下 f[i][0/1]f[i][0/1]f[i][0/1]表示i子树内,关键点跟不跟外界联通 然后分一下当前点是不是关键点来转移就好了代码#include <bits/stdc++.h>#define cl clea...原创 2018-04-27 11:13:55 · 187 阅读 · 0 评论 -
UOJ #104. 【APIO2014】Split the sequence 斜率优化dp
题意你正在玩一个关于长度为 n 的非负整数序列的游戏。这个游戏中你需要把序列分成 k+1个非空的块。为了得到 k+1块,你需要重复下面的操作 k次:选择一个有超过一个元素的块(初始时你只有一块,即整个序列) 选择两个相邻元素把这个块从中间分开,得到两个非空的块。 每次操作后你将获得那两个新产生的块的元素和的乘积的分数。你想要最大化最后的总得分。分析首先这道题你如果确定了从哪里分...原创 2018-05-07 21:02:39 · 140 阅读 · 0 评论 -
bzoj 4559: [JLoi2016]成绩比较 dp+拉格朗日插值
题意G系共有n位同学,M门必修课。这N位同学的编号为0到N-1的整数,其中B神的编号为0号。这M门必修课编号为0到M-1的整数。一位同学在必修课上可以获得的分数是1到Ui中的一个整数。如果在每门课上A获得的成绩均小于等于B获得的成绩,则称A被B碾压。在B神的说法中,G系共有K位同学被他碾压(不包括他自己),而其他N-K-1位同学则没有被他碾压。D神查到了B神每门必修课的排名。这里的排名是指:如...原创 2018-04-02 12:06:21 · 296 阅读 · 2 评论