zoukankan      html  css  js  c++  java
  • POJ 3071 Football (概率DP)

    题意:给定 2的n次方 个团队对每个队的战胜的概率,一块要打 n 场,每场都是 1 对 2, 2 对 3,每次都取赢的一方,问你最后谁是冠军的概率最大。

    析:dp[i][j] 表示 第 i 场 j 胜的概率,每次只要算 i 相邻的且不是已经打过的 2 i-1次方个队,最后再选出概率最大的就好。

    代码如下:

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include <cstdio>
    #include <string>
    #include <cstdlib>
    #include <cmath>
    #include <iostream>
    #include <cstring>
    #include <set>
    #include <queue>
    #include <algorithm>
    #include <vector>
    #include <map>
    #include <cctype>
    #include <cmath>
    #include <stack>
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    //#include <tr1/unordered_map>
    #define freopenr freopen("in.txt", "r", stdin)
    #define freopenw freopen("out.txt", "w", stdout)
    using namespace std;
    //using namespace std :: tr1;
    
    typedef long long LL;
    typedef pair<int, int> P;
    const int INF = 0x3f3f3f3f;
    const double inf = 0x3f3f3f3f3f3f;
    const LL LNF = 0x3f3f3f3f3f3f;
    const double PI = acos(-1.0);
    const double eps = 1e-8;
    const int maxn = 5e4 + 5;
    const LL mod = 10000000000007;
    const int N = 1e6 + 5;
    const int dr[] = {-1, 0, 1, 0, 1, 1, -1, -1};
    const int dc[] = {0, 1, 0, -1, 1, -1, 1, -1};
    const char *Hex[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
    inline LL gcd(LL a, LL b){  return b == 0 ? a : gcd(b, a%b); }
    int n, m;
    const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    inline int Min(int a, int b){ return a < b ? a : b; }
    inline int Max(int a, int b){ return a > b ? a : b; }
    inline LL Min(LL a, LL b){ return a < b ? a : b; }
    inline LL Max(LL a, LL b){ return a > b ? a : b; }
    inline bool is_in(int r, int c){
        return r >= 0 && r < n && c >= 0 && c < m;
    
    }
    double a[150][150];
    double dp[10][150];
    int f[10];
    
    int main(){
        f[0] = 1;
        for(int i = 1; i < 10; ++i) f[i] = f[i-1] * 2;
        for(int i = 0; i < 150; ++i)  dp[0][i] = 1.0;
        while(scanf("%d", &n) == 1 && n >= 0){
            for(int i = 1; i <= f[n]; ++i)
                for(int j = 1; j <= f[n]; ++j)
                    scanf("%lf", &a[i][j]);
    
            for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= f[n]; ++j)
                    dp[i][j] = 0.0;
            for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= f[n]; j += f[i])
                    for(int k = j; k < j+f[i-1]; ++k)
                        for(int l = j+f[i-1]; l < j+f[i-1]+f[i-1]; ++l){
                            dp[i][k] += dp[i-1][k] * dp[i-1][l] * a[k][l];
                            dp[i][l] += dp[i-1][k] * dp[i-1][l] * a[l][k];
                        }
    
            double ans = 0.0;
            int idx = -1;
            for(int i = 1; i <= f[n]; ++i) if(dp[n][i]-ans >= eps){
                ans = dp[n][i];
                idx = i;
            }
            printf("%d
    ", idx);
        }
        return 0;
    }
    
  • 相关阅读:
    发现个atan2的正确使用方式
    Forward+ Shading架构
    fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error 解决方案
    HDFS HA(高可用性)集群规划
    如何使用RTP引擎对语音编码进行转码
    关于 Angular 应用 tsconfig.json 中的 target 属性
    浅谈 Orbeon form builder 的权限控制
    关于 Angular 应用 tsconfig.json 中的 lib 属性
    orbeon form 通过 url 的方式同第三方应用集成的开发明细
    orbeon form 的配置介绍
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/5982656.html
Copyright © 2011-2022 走看看