BZOJ 3150 [Ctsc2013]猴子 ——期望DP 高斯消元
2017-05-05 16:22
225 查看
一堆牌的期望等于每张牌的期望值和。
考虑三个人的游戏即可得到。
然后每张牌遇到另外一张的概率相同,然后就可以列方程求解了。
#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int n,m; #define maxn 105 #define F(i,j,k) for (int i=j;i<=k;++i) double p[maxn][maxn],a[maxn][maxn]; char s[maxn]; void Gauss() { F(i,1,n) { int tmp=i; F(j,i+1,n) if (fabs(a[j][i])>fabs(a[tmp][i])) tmp=j; F(j,1,n+1) swap(a[tmp][j],a[i][j]); F(j,1,n) if (j!=i) { double t=a[j][i]/a[i][i]; F(k,i,n+1) a[j][k]-=t*a[i][k]; } } F(i,1,n) a[i][n+1]/=a[i][i]; } int main() { scanf("%d%d",&n,&m);//printf("n is %d m is %d\n",n,m); F(i,1,n) F(j,1,n) scanf("%lf",&p[i][j]); F(i,1,n-1) { a[i][i]=1-n; F(j,1,n) if (i!=j) a[i][j]+=p[i][j],a[i][i]+=p[i][j]; } F(i,1,n) a [i]=1; a [n+1]=1; Gauss(); double ans; F(i,1,m) { scanf("%s",s+1);ans=0; F(j,1,n) if (s[j]=='1') ans+=a[j][n+1]; printf("%.8lf\n",ans); } }
相关文章推荐
- bzoj 3143: [Hnoi2013]游走 期望dp+高斯消元
- [期望DP+高斯消元] BZOJ3143: [Hnoi2013]游走
- 【BZOJ 3143】 [Hnoi2013]游走 期望DP|高斯消元|贪心
- bzoj3143 [Hnoi2013]游走 (期望概率DP + 高斯消元)
- 【bzoj3143】[Hnoi2013]游走 期望dp+高斯消元
- bzoj 3150: [Ctsc2013]猴子 高斯消元
- 【BZOJ3143】【Hnoi2013】 游走 期望DP 高斯消元
- 【BZOJ3143】[Hnoi2013]游走【高斯消元】【期望DP】【贪心】
- [期望 DP || 高斯消元 KMP] BZOJ 3213 [Zjoi2013]抛硬币
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
- 【BZOJ3143】[Hnoi2013]游走 期望DP+高斯消元
- BZOJ 3143 HNOI2013 游走 期望DP+高斯消元
- BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)
- 【BZOJ3270】博物馆 期望DP+高斯消元
- 【bzoj2337】[HNOI2011]XOR和路径 期望dp+高斯消元
- 【数学期望】【高斯消元】bzoj3143 [Hnoi2013]游走
- BZOJ 4820 [Sdoi2017]硬币游戏 ——期望DP 高斯消元
- [BZOJ2337][HNOI2011]XOR和路径(期望概率dp+高斯消元)
- bzoj 3143 [Hnoi2013]游走(贪心,高斯消元,期望方程)
- 【期望DP+高斯消元】BZOJ3270-博物馆