【BZOJ 2688】 2688: Green Hackenbush (概率DP+博弈-树上删边)
2688: Green Hackenbush
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 42 Solved: 16Description
有一个古老的游戏叫做Green Hackenbush,游戏是这样进行的:两个人轮流在一棵树上删边,每次删边后不与根联通的子树直接被ignore,不能删边的游戏者输。Alice和Bob也在玩这个游戏,不过他们面对的是n棵树,第i棵树是含有a[i]个节点的二叉树。先手的Alice想知道自己有多大的概率获胜(假设我们的Alice和Bob同学都是无限聪明的)。Input
第一行一个数n。接下来每行一个数a[i]。Output
一个保留6位小数的实数ans。Sample Input
1
2Sample Output
1.000000HINT
对于100%的数据,n<=100,a[i]<=100
【分析】
想到了,但是以为过不了的复杂度。。
树上删边游戏有一个结论就是:树的sg值等与子树的sg值+1的乘积。
证明具体看:http://www.cnblogs.com/Konjakmoyu/p/5412444.html
f[i][j]表示规模为i的子树,其sg为j的概率。
因为是二叉树,枚举一下子树就好了。概率用方案数/总方案数 求,这个方案数呢是卡特兰数啊显然,然后dalao说用double就好了?
【然后四重循环的复杂度也很迷人。。
然后把多棵树合起来就是g[i][j]表示前i棵数,sg异或和为j的概率。
最后把sg不为0的概率加起来就是答案。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 210 double f[Maxn][Maxn],sm[Maxn];
double g[Maxn][Maxn];
int a[Maxn]; int main()
{
int n,mx=,M;
scanf("%d",&n);
for(int i=;i<=n;i++) {scanf("%d",&a[i]);mx=max(mx,a[i]);}
M=;while(M<=mx) M<<=;M--;
f[][]=1.0;sm[]=;
for(int i=;i<=mx;i++)
{
sm[i]=sm[i-]*;
for(int j=;j<=M;j++) f[i][j]=f[i-][j-]**sm[i-];
for(int j=;j<i;j++)
{
sm[i]+=sm[j]*sm[i-j-];
for(int k=;k<=M;k++)
for(int l=;l<=M;l++)
{
f[i][(k+)^(l+)]+=f[j][k]*f[i-j-][l]*sm[j]*sm[i-j-];
}
}
for(int j=;j<=M;j++) f[i][j]/=sm[i];
}
g[][]=1.0;
for(int i=;i<=n;i++)
{
for(int j=;j<=M;j++)
for(int k=;k<=M;k++)
g[i][j]+=g[i-][k]*f[a[i]][j^k];
}
double ans=;
for(int j=;j<=M;j++) ans+=g[n][j];
printf("%.6lf\n",ans);
return ;
}
2017-04-21 18:32:45
【BZOJ 2688】 2688: Green Hackenbush (概率DP+博弈-树上删边)的更多相关文章
- BZOJ 3143 [Hnoi2013]游走 ——概率DP
概率DP+高斯消元 与博物馆一题不同的是,最终的状态是有一定的概率到达的,但是由于不能从最终状态中出来,所以最后要把最终状态的概率置为0. 一条边$(x,y)$经过的概率是x点的概率$*x$到$y$的 ...
- BZOJ.1076.[SCOI2008]奖励关(概率DP 倒推)
题目链接 BZOJ 洛谷 真的题意不明啊.. \(Description\) 你有k次选择的机会,每次将从n种物品中随机一件给你,你可以选择选或不选.选择它会获得这种物品的价值:选择一件物品前需要先选 ...
- BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]
3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...
- BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...
- bzoj 2337 高斯消元+概率DP
题目大意: 每条路径上有一个距离值,从1走到N可以得到一个所有经过路径的异或和,求这个异或和的数学期望 这道题直接去求数学期望的DP会导致很难列出多元方程组 我们可以考虑每一个二进制位从1走到N的平均 ...
- BZOJ 1076: [SCOI2008]奖励关(概率+dp)
首先嘛,看了这么久概率论真的不错啊。看到就知道怎么写(其实也挺容易的= =) 直接数位dp就行了 CODE: #include<cstdio> #include<cstring> ...
- bzoj 4008 亚瑟王 期望概率dp
对于这种看起来就比较傻逼麻烦的题,最关键的就是想怎么巧妙的设置状态数组,使转移尽可能的简洁. 一开始我想的是f[i][j]表示到第j轮第i张牌还没有被选的概率,后来发现转移起来特别坑爹,还会有重的或漏 ...
- BZOJ 2337 XOR和路径(概率DP)
求点1到点n经过的路径权值异或和的期望. 考虑按位计算,对于每一位来说,令dp[i]表示从i到n的异或和期望值. 那么dp[i]=sum(dp[j]+1-dp[k]).如果w(i,j)这一位为0,如果 ...
- BZOJ的两道osu概率DP easy与osu
坑 http://blog.csdn.net/CreationAugust/article/details/49516415 http://blog.csdn.net/braketbn/article ...
随机推荐
- python概念-Socket到底有多骚
Socket究竟是什么呢? 简单来说Socket就是用来完成客户端与服务器之间的通信 例如浏览器访问网页,例如网络游戏等一切基于客户端服务器来实现的C/S架构程序 Socket是基于互联网OSI七层协 ...
- js数据类型隐式转换问题
js数据类型隐式转换 ![] == false //true 空数组和基本类型转换,会先[].toString() 再继续比较 ![] == [] //true ![] //false [] == [ ...
- Oracle数据库中几种常见的SCN
控制文件中的SCN 数据文件头的SCN 数据块中的SCN 日志文件头中的SCN 事务SCN 内存中的SCN 一 控制文件中的SCN 1.1 数据库SCN 数据库SCN表示最近一次全量checkpoin ...
- 【技巧总结】Penetration Test Engineer[5]-Operating System Security(SQL Server、MySQL提权)
4.数据库安全基础 4.1.MSSQL 数据库角色权限 sysadmin:执行SQL Server中的任何动作 db_owner:可以执行数据库中技术所有动作的用户 public:数据库的每个合法用户 ...
- 运用java反射
Class类 要正确使用Java反射机制就得使用java.lang.Class这个类.它是Java反射机制的起源.当一个类被加载以后,Java虚拟机就会自动产生一个Class对象.通过这个Class对 ...
- Mac上删除不了的文件,Windows上也粉碎不了怎么办?
推荐一个Mac上的软件:Tuxera Disk Manager 用法很简单:选择删除文件原来所在的文件进行维护就可以了. 维护之后,在废纸篓中清除,成功.
- Python基础 - Ubuntu+Nginx+uwsgi+supervisor部署Flask应用
网上找了许多讲关于Flask应用部署的文章几乎都是一个helloworld的Demo,按照helloworld来部署都没问题,但实际项目部署时还是遇到了不少问题.在这里简单写下自己成功部署的过程,防止 ...
- mybatis之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
- Linux下的堆off-by-one的利用
这篇稿子已经投到了360安全播报,http://bobao.360.cn/learning/detail/3113.html
- const分别在C和C++语言里的含义和实现机制
const的含义 简单地说:const在c语言中表示只读的变量,而在c++语言中表示常量. C语言 const是constant的缩写,是恒定不变的意思,也翻译为常量,但是很多人都认为被 ...