【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 ...
随机推荐
- PHP返回Json数据函数封装
/** * 返回Json数据 * @param int $code * @param string $message * @param array $data * @return string */ ...
- C++ Primer 5th 第14章 重载运算与类型转换
当运算符作用域类类型的对象时,可以通过运算符重载来重新定义该运算符的含义.重载运算符的意义在于我们和用户能够更简洁的书写和更方便的使用代码. 基本概念 重载的运算符是具有特殊名字的函数:函数名由关键词 ...
- Struts2笔记3--获取ServletAPI和OGNL与值栈
获取ServletAPI: 第一种方式: //在request域中放入属性req,暂且认为getContext()获取的是request域空间,但实际不是 ActionContext.getConte ...
- 非极大值抑制(NMS,Non-Maximum Suppression)的原理与代码详解
1.NMS的原理 NMS(Non-Maximum Suppression)算法本质是搜索局部极大值,抑制非极大值元素.NMS就是需要根据score矩阵和region的坐标信息,从中找到置信度比较高的b ...
- cout如何输出十六进制
http://blog.csdn.net/okadler0518/article/details/4962340 cout<<hex<<i<<endl; //输出十 ...
- Scrapy的【SitemapSpider】的【官网示例】没有name属性
Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0, 上午看了Scrapy的Spiders官文,并按照其中的SitemapSpider的示例练习,发现官文的示例存在问题 ...
- java基础79 会话管理(Cookie技术、Session技术)
1.概念 会话管理:管理浏览器和服务器之间会话过程中产生的会话数据. Cookie技术:会话数据保存到浏览器客户端.[存 编号/标记(id)] Session技术:会话技术会保存到 ...
- 窗口启用/禁用功能函数EnableWindow的使用
在非MFC环境中如何使控件或者窗口禁用呢?起初是想通过发送消息来实现,但找来找去都木有找到控件禁用的消息(也是是博主木有找到的缘故),所以只能另辟蹊径,使用 EnableWindow这个函数, 该函数 ...
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP CO ...
- MySQL学习笔记:调用存储过程或函数报1418错误
问题 MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DE ...