首页 > 其他分享 >【CF1750F】Majority(容斥+DP)

【CF1750F】Majority(容斥+DP)

时间:2022-11-14 18:34:20浏览次数:58  
标签:01 容斥 CF1750F Majority 长度 DP define

题目链接

  • 规定一个 \(01\) 串 \(s\) 是好的,当且仅当可以经过若干次下面的操作将它变成全 \(1\):选择一对 \(i,j\) 满足 \(s_i=s_j=1\) 且 \(\sum_{k=i}^js_k\ge\frac{j-i+1}2\),将 \(s_{i\sim j}\) 全部修改为 \(1\)。
  • 求有多少个长度为 \(n\) 的 \(01\) 串是好的。
  • \(1\le n\le5\times10^3\)

考虑最终状态

容易发现无论如何操作一个串,它所能达到的最终状态是一定的。

一个串无法继续操作的充要条件就是相邻两段 \(1\) 的长度之和小于它们之间的 \(0\) 的长度。

所以考虑直接根据这个最终状态来 DP。

容斥+DP

设 \(f_{i,j}\) 表示长度为 \(i\)、满足两端都是 \(1\) 且最后一段 \(1\) 长度为 \(j\) 的最终状态数。

则长度为 \(i\) 的好串数就是 \(f_{i,j}\)。显然可以容斥计算出 \(f_{i,i}=2^{i-2}-\sum_{j=1}^{i-1}f_{i,j}\)(特殊地,\(f_{1,1}=1\))。

对于 \(j < i\) 的 \(f_{i,j}\),设最后一段 \(0\) 的长度为 \(k\),则可以从满足 \(x+j < k\) 的 \(f_{i-j-k,x}\) 转移,变形一下就是 \((i-j-k)+x < i-2j\)。

于是设 \(g_t\) 为 \(i+j\le t\) 的 \(f_{i,j}\) 之和,可知 \(f_{i,j}=g_{i-2j-1}\times f_{j,j}\)。

代码:\(O(n^2)\)

#include<bits/stdc++.h>
#define Cn const
#define CI Cn int&
#define N 5000
#define Inc(x,y) ((x+=(y))>=X&&(x-=X))
#define Dec(x,y) ((x-=(y))<0&&(x+=X))
using namespace std;
int n,X,f[N+5][N+5],g[N+5],d[N+5];
int main()
{
	int i;for(scanf("%d%d",&n,&X),f[1][1]=1,i=2;i<=n;++i) g[i]=1;//f[1][1]=1
	int j,t=0,p=1;for(i=2;i<=n;++i)//容斥+DP
	{
		for(j=1;j^i;++j) i-2*j>0&&(f[i][j]=1LL*g[i-2*j-1]*f[j][j]%X);//转移j<i的f[i][j]
		for(f[i][i]=p,j=1;j^i;++j) Dec(f[i][i],f[i][j]);p=(p<<1)%X;//容斥f[i][i]
		for(t=0,j=1;i+j<=n;++j) Inc(t,f[i][j]),Inc(g[i+j],t);//更新g
	}
	return printf("%d\n",f[n][n]),0;
}

标签:01,容斥,CF1750F,Majority,长度,DP,define
From: https://www.cnblogs.com/chenxiaoran666/p/CF1750F.html

相关文章

  • CF1750F Majority
    题面传送门看到这个题目觉得非常神奇。首先我们考虑设\(g_i\)表示\(i\)长度的答案,但是显然不好转移。考虑容斥,用总方案数减去不能消成一个的方案数,这里的总方案数要求两......
  • [AGC041F] Histogram Rooks(神仙题 网格 容斥计数)
    [AGC041F]HistogramRooks给定一个\(N\)行\(N\)列的棋盘,第\(i\)行只有\([1,h_i]\)是有格子的,其他都是虚空。一个棋子放在一个格子上,我们称一个格子被一个棋子......
  • CodeTON Round 3 (C.差分维护,D.容斥原理)
    C.ComplementaryXOR题目大意:给你两个01串ab,问你是否可以通过一下两种操作在不超过n+5次的前提下将两个串都变为0,同时需要输出可以的操作方案选择一个区间[l,r]将......
  • 【十二省联考2019】希望(容斥,换根DP,长链剖分,懒标记)
    暴力的想法是考虑钦定每个点作为到达点并统计贡献,但显然这样会算重。注意到会算重的到达点一定构成了一个连通块,这是一个很好的性质,方便了我们容斥:我们直接用点的贡献减去......
  • 【XSY3997】方格计数(容斥,dp)
    题面方格计数题解拼命容斥即可。先考虑\(k=0\)的情况。首先先对对角线的限制容斥,即用“没有限制-正对角线没选-反对角线没选+正反对角线都没选”。设\(Z\)中对角......
  • 【XSY3804】QQ数(莫比乌斯函数,容斥)
    题面题解明显地,这个QQ数可以用\(\mu\)表示,于是询问就变成了这样:\[\begin{aligned}&\sum_{i=1}^n\sum_{d|i}\left(1-\mu(d)^2\right)\\=&\sum_{d=1}^n\left\lfloo......
  • 【HNOI2015】实验比较(树形DP,容斥)
    题意:给你一棵树,你要对所有节点定一个顺序序列,形如\(p_1\oplus_1p_2\oplus_2p_3\cdotsp_{n-1}\oplus_{n-1}p_n\),其中\(\oplus_i\)为\(=\)或\(<\),\(p_{1\simn}......
  • 【CTS2019】珍珠(计数,容斥,NTT)
    题意:称一个长度为\(n\),值域为\([1,D]\)整数序列为合法序列,当且仅当序列中能选出\(m\)对数相等。问合法序列数。\(1\leqD\leq10^5,1\leqn,m\leq10^9\)。题解:设......
  • 【CFgym102870J】Junction of Orz Pandas(思维,容斥)
    暴力做法就不会做……考虑容斥,用所有数\(\leqa_i\)的方案减去所有数\(<a_i\)的方案得到最大值为\(a_i\)的方案,\(b_i\)同理容斥,时间复杂度\(O(2^{n+m}nm)\)。直......
  • 【AGC005D】_K Perm Counting(容斥,二分图,计数dp)
    首先正面做不太好做,考虑容斥。设\(f(m)\)表示排列中至少有\(m\)处\(|P_i-i|=k\)的方案数。那么答案就是\(\sum\limits_{i=0}^n(-1)^if(i)\)。原题可以看成一个二......