hdu4624 Endless Spin (min-max容斥+dp)

min-max容斥:

$$max\{a_i\}=\sum\limits_{S}(-1)^{|s|-1}min\{a_i|a_i \in S\}$$

关于证明,可以把一个数$a$看作是集合$\{1...a\}$,于是max相当于取并集,min相当于取交集,就变成了普通的容斥

然后这道题就可以dp了

然而我一直被卡精度 以下代码大概是对的(

 1 #include<bits/stdc++.h>
 2 #include<tr1/unordered_map>
 3 #define CLR(a,x) memset(a,x,sizeof(a))
 4 #define MP make_pair
 5 #define fi first
 6 #define se second
 7 using namespace std;
 8 typedef long long ll;
 9 typedef unsigned long long ull;
10 typedef long double ld;
11 typedef pair<int,int> pa;
12 const int maxn=55;
13
14 inline ll rd(){
15     ll x=0;char c=getchar();int neg=1;
16     while(c<‘0‘||c>‘9‘){if(c==‘-‘) neg=-1;c=getchar();}
17     while(c>=‘0‘&&c<=‘9‘) x=x*10+c-‘0‘,c=getchar();
18     return x*neg;
19 }
20
21 int N,f[maxn][2][2*maxn*maxn];
22
23 int main(){
24     //freopen("","r",stdin);
25     for(int T=rd();T;T--){
26         N=rd();
27         ld ans=0;
28         CLR(f,0);f[0][0][0]=1;
29         for(int i=1;i<=N+1;i++){
30             for(int b=0;b<=1;b++){
31                 for(int ii=0;ii<i;ii++){
32                     for(int j=0;j<=ii*(ii+1);j++){
33                         f[i][b][j+(i-ii-1)*(i-ii)]+=f[ii][!b][j];
34                     }
35                 }
36             }
37         }
38         for(int b=0;b<=1;b++){
39             for(int j=0;j<N*(N+1);j++){
40                 ans+=(b?-1:1)*(1.0L/(1-1.0L*j/(N*(N+1))))*f[N+1][b][j];
41             }
42         }
43         printf("%.15Lf\n",ans);
44     }
45     return 0;
46 }

原文地址:https://www.cnblogs.com/Ressed/p/10988477.html

时间: 2024-07-30 12:53:24

hdu4624 Endless Spin (min-max容斥+dp)的相关文章

$bzoj2560$ 串珠子 容斥+$dp$

正解:容斥+$dp$ 解题报告: 传送门$QwQ$ $umm$虽然题目蛮简练的了但还是有点难理解,,,我再抽象一点儿,就说有$n$个点,点$i$和点$j$之间有$a_{i,j}$条无向边可以连,问有多少种方案可以连成一张联通图 显然考虑容斥呗?设$f_i$表示状态为$i$的点连成联通图的合法方案,$g_i$表示状态为$i$的点随便连边的所有方案 显然$g_i$可以先预处理出来?就等于$\prod_{u,v\in i}a_{u,v}$.然后$f_i$就等于$g_i$减去不合法的数量.不合法数量显然

HDU4624 Endless Spin(概率&amp;&amp;dp)

2013年多校的题目,那个时候不太懂怎么做,最近重新拾起来,看了一下出题人当初的解题报告,再结合一下各种情况的理解,终于知道整个大致的做法,这里具体写一下做法. 题意:给你一段长度为[1..n]的白色区间,每次随机的取一个子区间将这个区间涂黑,问整个区间被涂黑时需要的期望次数. 1. 首先要做的是一个题目的转化.如果我定义pi为 恰好i次将区间涂黑的概率,那么显然期望 E= 0*p0+1*p1+2*p2+... 换一种角度看这个公式,其实这个公式可以这么写 E = p1 + p2 + p3 +

[BZOJ4455][ZJOI2016]数星星(容斥DP)

4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 707  Solved: 419[Submit][Status][Discuss] Description 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细 线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这个饰品只剩下了n?1条细线,但 通过这些细线,这颗小星星还是被串在一起,也就是这

【XSY3156】简单计数II 容斥 DP

题目大意 定义一个序列的权值为:把所有相邻的相同的数合并为一个集合后,所有集合的大小的乘积. 特别的,第一个数和最后一个数是相邻的. 现在你有 \(n\) 种数,第 \(i\) 种有 \(c_i\) 个.求所有不同的序列的权值的和. \(n\leq 50,c_i\leq 100\) 题解 考虑第一个数和最后一个数不相邻时怎么做. 记 \(g_{i,j}\) 为出现了 \(i\) 次的数分成 \(j\) 个集合,所有集合大小的乘积的和. \[ g_{i,j}=\sum_{k=1}^ig_{i-k,

AGC 005D.~K Perm Counting(容斥 DP 二分图)

题目链接 \(Description\) 给定\(n,k\),求 满足对于所有\(i\),\(|a_i-i|\neq k\)的排列的个数. \(2\leq n\leq 2000,\quad 1\leq k\leq n-1\). \(Solution\) 容斥.则\(Ans=\sum_{i=0}^n(-1)^ig(i)(n-i)!\),其中\(g(i)\)为至少有\(i\)个位置满足\(|a_i-i|=k\)的排列数. 考虑如何计算\(g(x)\).每个\(i\)向\(i+k\)和\(i-k\)连

bzoj2655calc 容斥+dp

2655: calc Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 322  Solved: 197[Submit][Status][Discuss] Description 一个序列a1,...,an是合法的,当且仅当: 长度为给定的n. a1,...,an都是[1,A]中的整数. a1,...,an互不相等. 一个序列的值定义为它里面所有数的乘积,即a1a2...an. 求所有不同合法序列的值的和. 两个序列不同当且仅当他们任意一位不一样.

Jzzhu and Numbers CodeForces - 449D (容斥,dp)

大意: 给定集合a, 求a的按位与和等于0的非空子集数. 为了方便表述, 把每个数看成一个二进制位表示的集合, 例如十进制的$10$就看做集合$\{1,3\}$. 假设给定数的范围在$[0,2^{m})$内, 记$U=\{0,1,2,\cdots,m-1\}$. 首先根据容斥可以得到 $$ans=\sum\limits_{S\subseteq 2^{U}}(-1)^{|S|}(2^{f_S}-1) \tag{1}$$ 其中$f_S=\sum\limits_{T\in a}[T\supseteq

HDU4624 Endless Spin 【最大最小反演】【期望DP】

题目分析: 题目是求$E(MAX_{i=1}^n(ai))$, 它等于$E(\sum_{s \subset S}{(-1)^{|s|-1}*min(s))} = \sum_{s \subset S}{(-1)^{|s|-1}*E(min(s))}$. 那么设计期望DP,令$f[i][j][k]$表示前i个球,可选的区间为j个,球的个数是奇数还是偶数.然后就是要写一个高精度,不一定要真的写,可以yy出一种简便方法. 代码: 1 #include<bits/stdc++.h> 2 using na

4455[Zjoi2016]小星星 容斥+dp

4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 527  Solved: 317[Submit][Status][Discuss] Description 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细 线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这个饰品只剩下了n?1条细线,但 通过这些细线,这颗小星星还是被串在一起,也就是这