zoukankan      html  css  js  c++  java
  • SPOJ 4060 A game with probability

    博弈论+dp+概率

    提交链接-
    题意不是很好懂

    Ai 表示剩 i 个石头、 A 先手的获胜概率。
    Bi 表示剩 i 个石头、 B先手的获胜概率。

    如果想选,对于 Ai:
    有 p 的概率进入 Bi−1 ;有 1−p 的概率进入 Bi
    所以 fi=p∗Bi−1+(1−p)∗Bi

    如果想选,对于 Bi:
    有 q 的概率进入 Ai−1 ;有 1−q 的概率进入 Ai
    所以 gi=q∗Ai−1+(1−q)∗Ai

    如果不想选, 把 p 变成 1 - p, q 变成 1 - q 即可

    为了满足递推关系,我们把 Bi 带入到 Ai 的式子中,
    整理得:

    Ai=(p∗Bi-1 +(1−p)∗q∗Ai-1 )/(1-(1−p)∗(1−q))

    Bi=(q∗Ai-1+(1−q)∗p∗Bi−1)/(1−(1−p)∗(1−q))

    然后剩 i 个石头时A的想不想选的意愿与 Ai−1、Ai−1 的大小关系有关。

    Ai−1>Bi−1 都不想选。

    因为 A 如果选了,就到了 Bi - 1,获胜概率就小了

    如果 B 选了, 就到了 Ai - 1, A的获胜概率就大了,B 的获胜概率就小了

    Bi−1<Bi−1 都想选。

    同理

    然后对于不想选的情况,那么 p=1−p,q=1−q 就行了。

    然而这样就没法用矩阵乘法了。。。
    就需要黑科技,,当n很大时,其实概率已经基本不动了,,让n=min(n,1000)就好了.

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    int init() {
    	int rv = 0, fh = 1;
    	char c = getchar();
    	while(c < '0' || c > '9') {
    		if(c == '-') fh = -1;
    		c = getchar();
    	}
    	while(c >= '0' && c <= '9') {
    		rv = (rv<<1) + (rv<<3) + c - '0';
    		c = getchar();
    	}
    	return fh * rv;
    }
    int T, n;
    double a[1005], b[1005], p, q;
    int main() {
    	T = init();
    	while(T--) {
    		n = init();
    		n = min(n, 1000);
    		scanf("%lf%lf", &p, &q);
    		a[0] = 0.0; b[0] = 1.0;
    		for(int i = 1 ; i <= n ; i++) {
    			if(a[i - 1] > b[i - 1]) {p = 1 - p; q = 1 - q;}
    			a[i] = p / (1 - (1 - p) * (1 - q)) * b[i - 1] + 
    				(1 - p) * q / (1 - (1 - p) * (1 - q)) * a[i - 1];
    			b[i] = q / (1 - (1 - p) * (1 - q)) * a[i - 1] + 
    				(1 - q) * p / (1 - (1 - p) * (1 - q)) * b[i - 1];
    			if(a[i - 1] > b[i - 1]) {p = 1 - p; q = 1 - q;}
    		}
    		printf("%.6lf
    ",a[n]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    nginx预防常见攻击
    nginx性能优化(针对于高并发量仅供参考,并不是方案)
    nginx平滑升级(1.14--1.15)
    LAMP动静分离安装(源码安装)
    洛谷-P1098 字符串的展开
    洛谷-P1086 花生采摘
    洛谷-P1042 乒乓球
    洛谷-P1031 均分纸牌
    洛谷-P1023 税收与补贴问题
    洛谷-P1125 笨小猴
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8505040.html
Copyright © 2011-2022 走看看