zoukankan      html  css  js  c++  java
  • ZOJ 3822 Domination

    题意:

    一个棋盘假设每行每列都有棋子那么这个棋盘达到目标状态  如今随机放棋子  问达到目标状态的期望步数

    思路:

    用概率来做  计算第k步达到目标状态的概率  进而求期望  概率计算方法就是dp  dp[k][i][j]表示第k步有i行被覆盖j列被覆盖  转移仅仅有4种  —— 同一时候覆盖行列  覆盖行  覆盖列  不覆盖  状态数50^4  非常easy

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<map>
    #include<set>
    #include<vector>
    #include<queue>
    #include<cstdlib>
    #include<ctime>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    #define N 55
    
    int t, n, m;
    double dp[N * N][N][N], ans;
    
    int main() {
    	int i, j, k;
    	scanf("%d", &t);
    	while (t--) {
    		memset(dp, 0, sizeof(dp));
    		dp[0][0][0] = 1;
    		ans = 0;
    		scanf("%d%d", &n, &m);
    		for (k = 1; k <= n * m; k++) {
    			for (i = 0; i <= n; i++) {
    				for (j = 0; j <= m; j++) {
    					if (i == n && j == m)
    						break;
    					int f00 = i * j - k + 1;
    					int f01 = i * (m - j);
    					int f10 = (n - i) * j;
    					int f11 = (n - i) * (m - j);
    					int sum = n * m - k + 1;
    					dp[k][i][j] += dp[k - 1][i][j] * f00 / sum;
    					dp[k][i + 1][j] += dp[k - 1][i][j] * f10 / sum;
    					dp[k][i][j + 1] += dp[k - 1][i][j] * f01 / sum;
    					dp[k][i + 1][j + 1] += dp[k - 1][i][j] * f11 / sum;
    				}
    			}
    			ans += dp[k][n][m] * k;
    		}
    		printf("%.10f
    ", ans);
    	}
    	return 0;
    }
    


  • 相关阅读:
    蓝桥杯 历届试题 带分数
    Myeclipse 操作数据库
    HDU 1007Quoit Design(最近点问题)
    java坦克大战源码下载
    蓝桥杯 历届试题 九宫重排
    Ueditor的配置和使用
    java 显示透明背景png图片
    mysql数据库移植
    错误:document.getElementById("userForm").submit();Object is not a function
    jsp获得文件的绝对路径
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5193008.html
Copyright © 2011-2022 走看看