3150: [Ctsc2013]猴子

Time Limit: 20 Sec  Memory Limit: 256 MBSec  Special Judge
Submit: 163  Solved: 105
[Submit][Status][Discuss]

Description

小Q和小M最近发明了一种卡牌游戏,叫猴子大战。游戏最初小Q和小M各会取得一部分猴子牌。每局游戏,他们两个
需要分别等概率地从自己的猴子牌中抽取一张进行战斗。获胜的一方将获得双方的猴子牌。如果一方获得了所有的
猴子牌,则该方获得整场游戏的胜利。否则游戏将一直进行下去。 在进行了若干场比赛以后,小Q和小M算出了一
张胜率表,为每张猴子牌之间进行战斗双方获胜的概率。由于每场战斗一定会决出胜负,而且胜率不受先后顺序的
影响,因此对于任意的两张猴子牌A和B,A战胜B的概率加B战胜A的概率为1。 由于自己老是输给小M,小Q开始怀疑
自己每次拿到的猴子牌是否能获得胜利。他希望求出自己拿到的每种猴子牌组合的获胜的概率。 由于小Q接下来还
有在CD市体育中心数以万计的运动计划,因此这个问题只能交给你来解决了。

Input

输入的第一行包含两个正整数n和m,表示猴子牌的总张数和需要求的猴子牌组合的个数。 
接下来有n行,每行包含n个实数,每个实数保留了两位小数。
这n行中,其中第i行第j列的数为Pi,j,表示第i张猴子牌战胜第j张猴子牌的概率。
保证Pi,j + Pj,i  =  1。特别地,Pi,j = 0.5,没有特殊意义。 最后又m行。
每行包含一个长度为n的无空格分隔的01串,表示一个猴子牌的组合。
其中第i个字符如果为0,表示最初第i张牌在小M处,否则表示在小Q处。

Output

输出m行,每行一个实数,四舍五入保留八位小数(请强制输出八位浮点数),
一次表示每个给定的猴子牌组合下小Q获胜的概率。

Sample Input

3 4
0.50 0.60 0.40
0.40 0.50 0.70
0.60 0.30 0.50
110
011
111
000

Sample Output

0.71304348
0.66086957
1.00000000
0.00000000

HINT

【评分方法】 
你的答案的每一行如果与我们给定的参考答案的差别均不超过2×10-6,则获得该测试点的得分,否则不得分。 
参考答案保证与真实值的差别不超过10-8,因此如果你输出的答案保证与真实值差别不超过2×10^-6 — 2×10^-8,才能保证正确。

Source

vfleaking提供spj

首先可以想到设f[S]表示手牌集合为S时的胜利期望。

这样显然是过不了的。

这时我们发现如果A∩B=ø则f[AυB]=f[A]+f[B]

因此我们可以设f[i]表示手牌为i的胜利期望。

运用高斯消元求解即可。

 #include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
double f[][],a[][];
int n,m;char s[];
int main() {
scanf("%d%d",&n,&m);
for(int i=;i<n;i++) {
a[i][i]=-n;
for(int j=;j<=n;j++) {
double tmp;scanf("%lf",&tmp);
if(i!=j) {
a[i][j]=tmp;a[i][i]+=tmp;
}
}
}
for(int i=;i<=n;i++) {
double tmp;scanf("%lf",&tmp);
a[n][i]=;
}
a[n][n+]=;
for(int i=;i<=n;i++) {
int tmp=i;
for(int j=i;j<=n;j++) {
if(fabs(a[j][i])>=1e-) {tmp=j;break;}
}
if(tmp!=i) swap(a[tmp],a[i]);
for(int j=i+;j<=n;j++) {
double chg=a[j][i]/a[i][i];
for(int k=i;k<=n;k++) {
a[j][k]-=a[i][k]*chg;
}
}
}
for(int i=n;i>=;i--) {
for(int j=i+;j<=n;j++) a[i][n+]-=a[i][j]*a[j][n+];
a[i][n+]/=a[i][i];
}
while(m--) {
scanf("%s",s+);double ans=;
for(int i=;i<=n;i++) {
if(s[i]=='') ans+=a[i][n+];
}
printf("%.8lf\n",ans);
}
}

[BZOJ3150][Ctsc2013]猴子 期望dp+高斯消元的更多相关文章

  1. BZOJ 3150 [Ctsc2013]猴子 ——期望DP 高斯消元

    一堆牌的期望等于每张牌的期望值和. 考虑三个人的游戏即可得到. 然后每张牌遇到另外一张的概率相同,然后就可以列方程求解了. #include <cmath> #include <cs ...

  2. BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元

    BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...

  3. HDU 2262 Where is the canteen 期望dp+高斯消元

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...

  4. hdu4418 Time travel 【期望dp + 高斯消元】

    题目链接 BZOJ4418 题解 题意:从一个序列上某一点开始沿一个方向走,走到头返回,每次走的步长各有概率,问走到一点的期望步数,或者无解 我们先将序列倍长形成循环序列,\(n = (N - 1) ...

  5. 【noi2019集训题1】 脑部进食 期望dp+高斯消元

    题目大意:有n个点,m条有向边,每条边上有一个小写字母. 有一个人从1号点开始在这个图上随机游走,游走过程中他会按顺序记录下走过的边上的字符. 如果在某个时刻,他记录下的字符串中,存在一个子序列和S2 ...

  6. LightOJ 1151 Snakes and Ladders 期望dp+高斯消元

    题目传送门 题目大意:10*10的地图,不过可以直接看成1*100的,从1出发,要到达100,每次走的步数用一个大小为6的骰子决定.地图上有很多个通道 A可以直接到B,不过A和B大小不确定   而且 ...

  7. P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为\(n\),剩余\(hp\)点生命,然后每个时刻如果生命值没有满那么有\( ...

  8. ZJUT 1423 地下迷宫(期望DP&高斯消元)

    地下迷宫 Time Limit:1000MS  Memory Limit:32768K Description: 由于山体滑坡,DK被困在了地下蜘蛛王国迷宫.为了抢在DH之前来到TFT,DK必须尽快走 ...

  9. Codeforces.24D.Broken robot(期望DP 高斯消元)

    题目链接 可能这儿的会更易懂一些(表示不想再多写了). 令\(f[i][j]\)表示从\((i,j)\)到达最后一行的期望步数.那么有\(f[n][j]=0\). 若\(m=1\),答案是\(2(n- ...

随机推荐

  1. OpenCV中响应鼠标消息 (转)

    #include <cv.h> #include <highgui.h> #include <stdio.h> #pragma comment(lib," ...

  2. PID控制算法的C语言实现五 积分分离的PID控制算法C语言实现

    在普通PID控制中,引入积分环节的目的主要是为了消除静差,提高控制精度.但在过程的启动.结束或大幅度增减设定时,短时间内系统输出有很大的偏差,会造成PID运算的积分积累,致使控制量超过执行机构可能允许 ...

  3. Codeforces 585.D Lizard Era: Beginning

    D. Lizard Era: Beginning time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  4. HDU 6038

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  5. python requests https 访问出错

    错误提示: /usr/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:100: InsecurePla ...

  6. 解决tomcat占用8080端口问题图文详解

    相信很多朋友都遇到过这样的问题吧,tomcat死机了,重启eclipse之后,发现 Several ports (8080, 8009) required by Tomcat v6.0 Server ...

  7. spring boot 2.0.3+spring cloud (Finchley)7、服务链路追踪Spring Cloud Sleuth

    参考:Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin[Finchley 版] Spring Cloud Sleuth 是Spring Cloud的一个组件,主要功能是 ...

  8. NOIP模拟赛8

    今天又爆零啦... T1 题目描述 #define goodcatdog gcd #define important i #define judge  j 神说 每个梦想就是一轮月亮,高高地孤寂地挂在 ...

  9. codeblocks快捷键(转)

    ==日常编辑== • 按住Ctrl滚滚轮,代码的字体会随你心意变大变小.• 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦:相关设置:Mouse Drag Scrolling.• Ctr ...

  10. 响应式布局(Responsive Layout)/流式布局(Fluid Layout)/自适应布局(Adaptive)

    1.使用媒体查询来适应不同视口的固定宽度设计,例如bootstrap的container类. 2.将固定像素布局转换成灵活的百分比布局,才能让页面元素根据视口大小在一个又一个媒体查询间伸缩修正样式. ...