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. MySQL 语句中执行优先级——and比or高

    转: MySQL 语句中执行优先级——and比or高 2017年04月20日 13:33:03 十步行 阅读数:7381   版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  2. Linux下的tar压缩解压缩命令详解(转)

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  3. Java面试题:多继承

    招聘和面试对开发经理来说是一个无尽头的工作,虽然有时你可以从HR这边获得一些帮助,但是最后还是得由你来拍板,或者就像另一篇文章"Java 面试题:写一个字符串的反转"所说: 面试开 ...

  4. CronTrigger 表达式 (调度配置)

    CronTrigger 的用途更广,相比基于特定时间间隔进行调度安排的 SimpleTrigger,CronTrigger 主要适用于基于日历的调度安排.例如:每星期二的 16:38:10 执行,每月 ...

  5. JAVA多线程提高八:线程锁技术

    前面我们讲到了synchronized:那么这节就来将lock的功效. 一.locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: |---Abst ...

  6. JAVA中反射机制四

    声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射四 利用反射获取类的属性 1.通过反射也可以获取到类中的属性,假设我们继续使用Person这个类,然后 ...

  7. DevExpress 常用命令包括导出-打印-打印预览等

    3.表格打印也是最常见的,打印代码如下: PrintingSystem ps = null; DevExpress.XtraPrinting.PrintableComponentLink link = ...

  8. LintCode 394: First Will Win

    LintCode 394: First Will Win 题目描述 有n个硬币排成一条线.两个参赛者轮流从右边依次拿走1或2个硬币,直到没有硬币为止.拿到最后一枚硬币的人获胜. 请判定 第一个玩家 是 ...

  9. 【CodeForces】708 B. Recover the String 数学构造

    [题目]B. Recover the String [题意]找到一个串s,满足其中子序列{0,0}{0,1}{1,0}{1,1}的数量分别满足给定的数a1~a4,或判断不存在.数字<=10^9, ...

  10. HNOI2019退役祭

    对你没看错,是退役祭. Day -2 春游.话说为什么又是植物园? Day -1 白天上文化课,晚上给机房其它童鞋出题. Day 0 给他们考试,然后颓3Dmaze,毕竟没网 Day 1 车上复习了下 ...