zoukankan      html  css  js  c++  java
  • tyvj 2002 扑克牌

    期望DP

    本题递推比较麻烦,可以记忆化搜索
    注意搜索的边界条件
    以及每一次转移

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    double dp[16][16][16][16][6][6];
    bool f[16][16][16][16][6][6];
    int term[4];
    double dfs(int a, int b, int c, int d, int p, int q) {
    	if(f[a][b][c][d][p][q]) return dp[a][b][c][d][p][q];
    	f[a][b][c][d][p][q] = 1;
    	double & ans = dp[a][b][c][d][p][q];ans = 0.0;
    	int r1 = a, r2 = b, r3 = c, r4 = d;
    	if(p == 1) r1++; if(p == 2) r2++; if(p == 3) r3++; if(p == 4) r4++;
    	if(q == 1) r1++; if(q == 2) r2++; if(q == 3) r3++; if(q == 4) r4++;
    	if(r1 >= term[0] && r2 >= term[1] && r3 >= term[2] && r4 >= term[3]) return ans = 0;
    	int sum = 54 - r1 - r2 - r3 - r4;
    	if(sum <= 0) return ans = 1e10;
    	if(a < 13) ans += dfs(a + 1, b, c, d, p, q) * (13 - a) /sum;
    	if(b < 13) ans += dfs(a, b + 1, c, d, p, q) * (13 - b) /sum;
    	if(c < 13) ans += dfs(a, b, c + 1, d, p, q) * (13 - c) /sum;
    	if(d < 13) ans += dfs(a, b, c, d + 1, p, q) * (13 - d) /sum;
    	if(!p) {
    		double tmp = dfs(a, b, c, d, 1, q);
    		tmp = min(tmp, dfs(a, b, c, d, 2, q));
    		tmp = min(tmp, dfs(a, b, c, d, 3, q));
    		tmp = min(tmp, dfs(a, b, c, d, 4, q));
    		ans += tmp / sum;
    	}
    	if(!q) {
    		double tmp = dfs(a, b, c, d, p, 1);
    		tmp = min(tmp, dfs(a, b, c, d, p, 2));
    		tmp = min(tmp, dfs(a, b, c, d, p, 3));
    		tmp = min(tmp, dfs(a, b, c, d, p, 4));
    		ans += tmp / sum;
    	}
    	ans += 1.0;//概率和是 1 ,所以我们直接加 1 即可
    	return ans;
    }
    int main() {
    	for(int i = 0; i < 4; i++) cin >> term[i];
    	double ans = dfs(0, 0, 0, 0, 0, 0);
    	if(ans >= 100.0) printf("-1.000
    ");
    	else printf("%.3f
    ", ans);
    	return 0;
    }
    
  • 相关阅读:
    TCP和UDP知识总结
    使用 DataX 增量同步数据(转)
    python对象类型
    Asp.net mvc使用SignaIR
    数据库分库分表思路 [转]
    Linux基本操作 [转]
    RabbitMQ入门教程 [转]
    设计模式
    设计模式六大原则
    Javascript实现数组去重 [转]
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8651281.html
Copyright © 2011-2022 走看看