zoukankan      html  css  js  c++  java
  • zoj 3822 Domination(dp)

    题目链接:zoj 3822 Domination

    题目大意:给定一个NM的棋盘,每次任选一个位置放置一枚棋子,直到每行每列上都至少有一枚棋子,问放置棋子个数的期望。

    解题思路:大白书上概率那一张有一道类似的题目,可是由于时间比較久了,还是略微想了一下。
    dp[i][j][k]表示i行j列上均有至少一枚棋子,而且消耗k步的概率(kij),由于放置在i+1~n上等价与放在i+1行上,同理列也是如此。所以有转移方程:

    • dp[i][j][k+1]+=dp[i][j][k](nk)(Sk)
    • dp[i+1][j][k+1]+=dp[i][j][k](Ni)j(Sk)
    • dp[i][j+1][k+1]+=dp[i][j][k](Mj)i(Sk)
    • dp[i+1][j+1][k+1]+=dp[i][j][k](Ni)(Mj)(Sk)
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 55;
    const int maxm = 2505;
    
    int N, M;
    double dp[maxn][maxn][maxm];
    
    double solve () {
        int S = N * M;
        memset(dp, 0, sizeof(dp));
        dp[1][1][1] = 1;
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= M; j++) {
                int n = i * j;
                for (int k = max(i, j); k <= n; k++) {
                    dp[i][j][k+1] += dp[i][j][k] * (n - k) / (S - k);
                    dp[i+1][j][k+1] += dp[i][j][k] * (N - i) * j / (S - k);
                    dp[i][j+1][k+1] += dp[i][j][k] * (M - j) * i / (S - k);
                    dp[i+1][j+1][k+1] += dp[i][j][k] * (N - i) * (M - j) / (S - k);
                }
            }
        }
    
        /*
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= M; j++) {
                printf("%d %d:", i, j);
                for (int k = max(i, j); k <= i * j; k++)
                    printf("%.3lf ", dp[i][j][k]);
                printf("
    ");
            }
        }
        */
    
        double ans = 0;
        for (int i = max(N, M); i <= S; i++)
            ans += (dp[N][M][i] - dp[N][M][i-1]) * i;
        return ans;
    }
    
    int main () {
        int cas;
        scanf("%d", &cas);
        while (scanf("%d%d", &N, &M) == 2) {
            printf("%.8lf
    ", solve());
        }
        return 0;
    }
  • 相关阅读:
    第四章 利用函数实现指定的功能
    5-7 点到原点的距离(多态)
    5-2 宠物的生长(多态)
    5-7 学生cpp成绩统计
    5-6 学生CPP成绩计算
    php将远程图片下载保存到本地
    vs2010 调试快捷键
    vs2010 快捷键大全
    [C#] 使用Application.AddMessageFilter当做Form的热键
    C# 收发和处理自定义的WINDOWS消息
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4365691.html
Copyright © 2011-2022 走看看