poj3071 Football

题意:有2^n支球队比赛,每次和相邻的球队踢,两两淘汰,给定任意两支球队相互踢赢的概率,求最后哪只球队最可能夺冠。

我们可以十分显然(大雾)地列出转移方程(设$f[ i ][ j ]$为第 $j$ 支球队踢赢第 $i$ 场比赛的概率,$k$为枚举的对手):

$f[ i ][ j ] += f[ i-1 ][ j ] * f[ i-1 ][ k ] * p[ j ][ k ]$

现在问题来了:怎么枚举 k, k的范围是啥

我们先列出比赛的模型(a Tower,n=4)

          ☺

    ♦             ♦       4

    (♦♦)            (♦♦)        3

  ((♦♦)  (♦♦))         ((♦♦)  (♦♦))         2

(((♦♦)  (♦♦))  ((♦♦)  (♦♦)))  (((♦♦)  (♦♦))  ((♦♦)  (♦♦)))         1

tips:为了方便块的运算,球队编号从0开始

对于第$ i$ 场比赛的球队$ j $ ,我们先找出它在第$i-1 $场比赛中所属的块:$u= j / ( 1<<(i-1) )$

蓝后我们可以直接用异或 ^ 求出它的对手在第$ i-1 $场比赛中所属的块  u^=1

而球队$j$ 在第 $i$ 场比赛中的对手只可能在块 $u$ 内且块中的每一队都可能是对手

于是我们枚举一遍块$u$内的元素,就可以愉快地dp了

(用cin直接TLE了(大雾))

#include<iostream>
#include<cstdio>
#define re register
using namespace std;
int n,m,ans;
double f[][],p[][],mxd;
int main(){
while(scanf("%d",&n)!=EOF){
if(n==-) break;
m=<<n;
for(re int i=;i<m;++i)
for(re int j=;j<m;++j)
scanf("%lf",&p[i][j]);
re int u;
for(u=;u+<m;u+=){ //初始化
f[][u]=;
f[][u+]=;
f[][u+]=;
f[][u+]=;
}for(;u<m;++u) f[][u]=; //循环展开
for(re int i=;i<=n;++i)
for(re int j=;j<m;++j){
u=j/(<<(i-)); u^=;
u*=(<<(i-));
f[i][j]=;
for(re int k=u+(<<(i-))-;k>=u;--k) //枚举块u内的所有球队
f[i][j]+=f[i-][j]*f[i-][k]*p[j][k];
}
mxd=;
for(re int i=;i<m;++i)
if(f[n][i]>mxd)
mxd=f[n][i],ans=i;
printf("%d\n",ans+);
}return ;
}

poj3071 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. POJ3071 Football 概率DP 简单

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

  4. Football 概率DP poj3071

                                                                                                 Footbal ...

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

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

  6. poj3071之概率DP

    Football Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2667   Accepted: 1361 Descript ...

  7. POJ 3071 Football(概率DP)

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

  8. poj 3071 Football(概率dp)

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

  9. POJ 3071 Football (概率DP)

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

随机推荐

  1. php面向对象的简单总结 $this $parent self

    面向对象涉及到的比较多,大概总结整理一下php的属性.对象,以及访问方式$this  $parent  self  的使用场景. 1. PHP类属性定义和访问方式: 1 <?php 2 clas ...

  2. HTML5中新的结构元素

    HTML5中新的结构元素 1. HTML5初始文件 1.1.doctype 在之前,doctype的声明是这样的: "http://www.w3. org/TR/html4/strict.d ...

  3. [Web Chart系列之六] canvas Chart 导出图文件

    前言 博主正在参加CSDN2013年度博客之星评选,如果这篇文章对您有用,请投他一票: 投票地址:http://vote.blog.csdn.net/blogstaritem/blogstar2013 ...

  4. iGson

    头文件 #import <Foundation/Foundation.h> #import <objc/runtime.h> #import "NSString+Ut ...

  5. java基础---->Java中图片的缩放

    缩略图代表网页上或计算机中图片经压缩方式处理后的小图 ,其中通常会包含指向完整大小的图片的超链接.缩略图用于在 Web 浏览器中更加迅速地装入图形或图片较多的网页.今天,我们就开始java中图像的缩略 ...

  6. LeetCode - PlusOne

    题意:给一个数按位存放在一个int数组中,要求返回这个数加一后的数组. 懒人解法: public class Solution { public int[] plusOne(int[] digits) ...

  7. DNS、链接网页、资源预加载处理

    从网页性能的角度来看,DNS的解析时间是比较耗时的.因此如果能预先下载网页中用到的其它域的资源.可提前进行DNS解析: <link rel="dns-prefetch" hr ...

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

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

  9. Java项目工程化之项目构建工具Maven

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  10. 自定义Realm解析

    自定义Realm解析---------------------------------------> /* * Copyright 2005-2013 shopxx.net. All right ...