直接上状态转移方程:

记dp[i][j]为第i轮比赛,第j个队伍获胜的概率。

那么初始状态下,dp[0][j]=1;//也就是第0轮比赛全都获胜

d[i][j]=sum(d[i-1][j]*d[i-1][k]*win[j][k])//也就是找到所有可能与j队在第i轮对决的k队,那么i队战胜k队的概率为 :第i-1轮第j队出线的概率*第i-1轮第k支队伍出现的概率*第i轮j队打败k队的概率。将所有的k的可能取值都遍历一遍求概率和,所得结果就是d[i][j]。

其中,如何找到所有可能的k队是一个难点。

一般想法是先进行分组:

例如共8支队伍

第一轮中分组为(1,2)(3,4)(5,6)(7,8)

第二轮中分组为((1|2),(3|4))((5|6),(7|8))

因此不妨先按组号进行划分:

第一轮第1组组员有1,2;第2组有3,4;第3组有5,6;第四组有7,8;

观察可发现 组号=(队号-1)>>1;

同样的在第二轮中 组号=(队号-1)>>2;

那么第n轮中 组号=(队号-1)>>n;

分完组只是第一步。

接下来我们知道,只有组号为相邻的两个数的队伍才可能比赛(而且这个相邻是有序的,必须满足(a,a+1)其中a为奇数)

这里应该可以按照奇偶性来判断,不过我没有尝试。而是用了另一个更简便的技巧:用异或运算来判断相邻。(异或完美的适配题目要求的这种相邻,具体见程序)

AC代码如下:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
double win[][];
double dp[][];
int main(void){
int n;
while(scanf("%d",&n)==&&n!=-){
memset(dp,,sizeof(dp)) ;
int len=<<n;
for(int i=;i<=len;i++){
for(int j=;j<=len;j++)
scanf("%lf",&win[i][j]);
}
for(int i=;i<=len;i++){//初始化
dp[][i]=;
}
for(int i=;i<=n;i++){
for(int j=;j<=len;j++){
//自己想,怎么判断能比赛
for(int k=;k<=len;k++) {
if(((k-)>>(i-))==(((j-)>>(i-))^)){//优先级 链接:https://blog.csdn.net/u013630349/article/details/47444939
//位移运算相当于在进行分组,异或运算则是判断相邻,而且这个相邻是正好满足题目条件的有规律的相邻 ,可以写几个数试一下。
dp[i][j]+=dp[i-][j]*dp[i-][k]*win[j][k];
}
}
}
}
double max=dp[n][];
int ans=;
for(int i=;i<=len;i++){
if(dp[n][i]>max){
max=dp[n][i];
ans=i;
}
}
printf("%d\n",ans);
}
return ;
}

poj_3071 Football(概率dp)的更多相关文章

  1. POJ3071:Football(概率DP)

    Description Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, …, 2 ...

  2. [poj3071]football概率dp

    题意:n支队伍两两进行比赛,求最有可能获得冠军的队伍. 解题关键:概率dp,转移方程:$dp[i][j] +  = dp[i][j]*dp[i][k]*p[j][k]$表示第$i$回合$j$获胜的概率 ...

  3. poj 3071 Football (概率DP水题)

    G - Football Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  4. POJ 3071 Football(概率DP)

    题目链接 不1Y都对不住看过那么多年的球.dp[i][j]表示i队进入第j轮的概率,此题用0-1<<n表示非常方便. #include <cstdio> #include &l ...

  5. Football 概率DP poj3071

                                                                                                 Footbal ...

  6. POJ3071 Football 概率DP 简单

    http://poj.org/problem?id=3071 题意:有2^n个队伍,给出每两个队伍之间的胜率,进行每轮淘汰数为队伍数/2的淘汰赛(每次比赛都是相邻两个队伍进行),问哪只队伍成为冠军概率 ...

  7. poj 3071 Football(概率dp)

    id=3071">http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率 ...

  8. POJ 3071 Football (概率DP)

    概率dp的典型题.用dp[j][i]表示第j个队第i场赢的概率.那么这场要赢就必须前一场赢了而且这一场战胜了可能的对手.这些都好想,关键是怎么找出当前要算的队伍的所有可能的竞争对手?这个用异或来算,从 ...

  9. [转]概率DP总结 by kuangbin

    概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...

  10. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

随机推荐

  1. Android 菜单动态变化【添加或去除】

    <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android: ...

  2. java EE ME SE有什么关系

    1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...

  3. Egret打包App 修改App名称和图标 (Egret4.1.0)

    图标替换位置在项目res下的drawable这些目录下,用新图标覆盖即可. 这里我用白色图片替换了白鹭默认的图片ic_launcher.png 修改App名字,在res->value->s ...

  4. 安装Hadoop系列 — 安装SSH免密码登录

    配置ssh免密码登录   1) 验证是否安装ssh:ssh -version显示如下的话则成功安装了OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 ...

  5. 最小费用流判负环消圈算法(poj2175)

    Evacuation Plan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3384   Accepted: 888   ...

  6. 170712、springboot编程之集成shiro

    这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security ...

  7. 虚拟机中CentoOs配置ip且连网

    1.修改"VMware Network Adapter VMnet8",配置IP 2.打开虚拟机,"编辑" => "虚拟网络编辑器", ...

  8. java 颁发公钥 私钥 php js RSA 加密解密整合

    PHP rsa密钥生成 加密解密 - PHP开发 - CSDN博客 https://blog.csdn.net/duzhenxun/article/details/8879227 <?php c ...

  9. 【Python】sasa版:文件中csv读取在写入csv读取的数据和执行是否成功。

    sasa写的文件(包含解析文字) # coding=utf- from selenium import webdriver from time import sleep import keyword ...

  10. CSS伪代码

    /*在p之后插入我是好人*/ p.first:after { content: "好人" } /*在p之前插入亲爱的朋友men*/ p:before { content: &quo ...