「考试」省选23

好难啊。。。

T3
讲了一次了,不过似乎大家都没有听懂。
详细的复读一次。
这个题是构造题。
首先题意转化。
我们发现一个\(E\)的序列的形成过程中任意时刻的图都可以对应为一个大小为\(i\)大强连通分量和\(n-i\)个单独的点的形式。
因为只有一个强连通所能到达的状态是最多的,这样我们求出这种图的方案就是\(E\)序列的方案。
然后设\(dp[e][i]\)为大强联通有\(i\)个点,总共有\(e\)条边的方案数。
转移很简单,枚举一个新圈即可:
\[dp[e][i]=dp[e-1][i]+\sum\limits_{j=0}^{i-1}dp[e-1][j]\]
关键是要判断这个状态是否合法。
怎么判断?
发现状态里面没有记录边数。
只需要判断边数是否合法即可。
设当前状态的图中最少和最多的边数分别为:\(L_i,R_i\)。
合法的判断就是:\(e\in[L_i,R_i]\)
\(R_i\)很好求。
分别考虑大强连通内部形成完全图+其余点形成满边\(DAG\)+强连通内部和外部连边,这样构造出的边数一定最多。
那么:
\[R_i=i(i-1)+\sum\limits_{j=1}^{n-i}(j-1)+i(n-i)=i(i-1)+(n-i)(n-i-1)/2+i(n-i)\]
但是发现\(L_i\)不是很好求。
关键在于大强联通套了几个圈上去我们无法计数。
所以给\(dp\)加一维:
\(dp[e][i][j]\)表示图中总共有\(e\)条边,大强连通分量中有\(i\)个点,\(j\)层圈的方案数。
这样我们就可以求出\(L_{ij}\)了。
\[L_{ij}=i+j-1\]
这个是怎么构造的呢?
我们考虑让每条边的价值应用到最大。
那么最优决策的一种一定是:让\(i-j\)个点作为基础,剩下\(j\)个分别作为新缩进去的的\(j\)层。
这样的话边数最少就是:\(L_{ij}=(i-j-1)+2j=i+j-1\)
这样就可以清楚判断条件了。
其中\(R_{ij}=R_i\)
那么紧接着再次考虑转移:
\[dp[e][i][j]=dp[e-1][i][j]+\sum\limits_{k=0}^{i-1}dp[e-1][k][j-1]\]
这样表示新枚举一个圈进去。
那么设:
\[g[e][i][j]=\sum\limits_{k=0}^{i}dp[e-1][k][j]\]
得到:
\[dp[e][i][j]=dp[e-1][i][j]+g[e-1][i-1][j-1]\]
这是一个前缀和优化。
复杂度就正确了,是:\(O(n^4)\)。

原文地址:https://www.cnblogs.com/Lrefrain/p/12298908.html

时间: 2024-08-30 17:28:25

「考试」省选23的相关文章

「考试」省选模拟13

在家的又一场. 状态还是一般吧. 自己扔了30分. T1 比较厉害的\(dp\),考场上想到了,结果因为细节太多就没有写(真的是多). 他其实就是个基环树dp. 我们首先断掉环上某个边,然后进行一次最大匹配的\(dp\),然后这样要求这个边必然不选. 另一种情况是这个必然选,那么这条边终点的出边必然不选,再次断那个出边 再\(dp\)一次得到答案. 考虑如何输出方案. 对于一个位置我们记录这个点的最大值出现在\(0/1\)上. 然后根据这个找到最佳方案所依赖的子节点方案. 即可输出方案了. T2

「考试」省选5

这套做的比较顺. 题也很好. T1 一个简单的贪心. 我们二分能够无伤通过的蛤个数. check就用之前用烂了的队列来check. 然后我们知道无伤通过最多一定对应这所有的石头被踩完,因为这样可以让每只蛤单次跳跃距离的最大值尽量的小. 这也就是说两种最优操作是合在一起的,有点像\(CSP-2019 D2T2\). 那么,二分出来剩下的就是必然要跳出大于\(D\)的了,我们取最小的几只,让他们一步从\(1\)跳过去. 另外一种情况是没有蛤可以无伤过. 这时候就让最便宜的那只去踩地雷,踩过所有的石头

「考试」省选7

比较简单的一场,但是我好像做的xibalan. 上来看了一小时题啥也不会. 然后发现\(T2\)数据范围像是分块. 然后傻逼一样去打根号算法. 最终结果当然是死了,到九点半也没写出来. 然而早就会\(T1\)正解了,于是先五分钟拿了\(T3\)的30分(为啥60那么好打..). 然后半个小时打完\(T1\)(临接表被卡常到90?) 然后继续搞T2最后弄出来了. 剩下十分钟啥也没干,三分块长从\(12s\)变成了\(2s\). T1 原题,\(xor\)差分之后就没了. T2 数据结构题毫无思维难

「考试」省选模拟12

状态不好考的不行(x 还是在家里不够专注吧(? T1 一个简单的离散化+bfs 细节不少 一个区间直接把两个端点都离散进去就行了. 统计答案的时候按块统计答案. T2 减枝的搜索. 不是特别难. 发现其实格子并不是很多. 被\(K\)给限制住了. 太多的都是0. 那么\(n+m-1\)的大小必然是小于等于10的. 直接爆搜. 剪枝要用到一个小技巧. 当前如果许多个颜色并没有放过,那么我放上一种颜色搜索一下得到答案,那么这几个颜色是等价的可以直接不重复搜索,然后将答案乘上个数. T3 挺厉害的\(

「考试」省选22

... T1真的我方了. T1 计算几何. ... 不管我用什么方法都\(A\)不了. 不管是用正弦定理余弦定理还是别的什么. 咕了. T2 简单的差分+马拉车. 先用马拉车处理出以每个位置为重心的回文串的长度. 然后处理出两个数组,\(st[i],ed[i]\). 分别表示以这个点为起点的回文串的终点的总和,以这个点为终点的回文串的起点的总和. 然后可以认为相当于是离线对数组加一个公差相等的等差数列,记录一下当前有几个数列以及首项的和即可线性差分了. 那么答案就是: \[ans=\sum\li

「考试」省选27

好像很迷? T1 很奇怪的期望. 根据那几个条件可以发现,概率最终会收敛到精度以下. 我们只需要迭代足够的轮次即可. T2 暴力的\(O(n|S|2^n)\)都过了... 奇怪. 发现答案是求并集,考虑基础的并交容斥. 设\(g(S),S\subseteq A\)为\(S\)中的所有的情况中\(S\)的所有串的公共前缀长度*这种情况发生的方案数. \(P(S)=\),\(S\)中的问号个数. 那么\(g(S)\)对全局的贡献是\(g(S)2^{P(A-S)}\) \[ans=\sum\limit

「考试」省选37

今天的题超极棒. T1 汉诺塔问题. 我们考虑把汉诺塔想象成一颗搜索树. 然后在上面找到当前的某一步就相当于递归到最底层. 然后中间判一下合不合法,如果走右儿子就加上左边的贡献就行了. 大概是个noip题... T2 设函数\(next(n,k,s)\)为大于等于\(n\)的\(k\)进制数中,各个位和为\(s\)的最小正整数. 这个玩意可以用一个数位\(dp\)实现,复杂度是\(O(klogn)\),判断一下剩下的位置的最大和是否大于剩下的\(s\)即可. 然后有了这个函数之后我们就可以做了.

「考试」省选56

直接全都WA爆了. T1 博弈论模型,其实就是转化成\(xor\)和为\(0\). 我们考虑朴素的\(dp\),\(dp[i][j][k]\)设为前\(i\)个元素,去掉的元素个数\(mod\ d\)为\(j\),\(xor\)和为\(k\)的方案. 暴力转移即可. 考虑最终答案是\(dp[n][0][0]\) 我们降序排序\(\{a\}\) 那么如果\(upbit(a_i)=2^j\),说明转移过来的\(k\)必然是小于\(2^{j+1}\)的. 这样我们转移的时候就可以指转移\(2^{j+1

「考试」省选61

T1 dy讲的原题. 建议去翻\(DC\)大神的\(dp\)视频课. T2 结论题. 一种想法是抽象为一个\(ans+1 n\)的矩阵. 每次从上面一段连续区间向底层走. 维护每一个位置最高的高度是多少就可以得到答案了. 这里用一个队列实现. 每一个位置的队列长度可以用来更新答案. T3 生成函数题. 考虑容斥. 用走了几条输入边来容斥. 设\(dp[i][s]\)为当前在\(i\)点,经过的点集为\(s\)的方案数. 设\(f[s]\)为经过的点集为\(s\)的方案数. 设\(g[i][s]\