题目链接:http://poj.org/problem?id=3071

题意:

  给定n,有2^n支队伍参加足球赛。

  给你所有的p[i][j],表示队伍i打败队伍j的概率。

  淘汰赛制。第一轮(1,2)两队比、(3,4)比、(5,6)比...共进行n轮比赛后产生冠军。

  问你冠军最有可能是哪支队伍。

题解:

  表示状态:

    dp[i][j] = probability to win

    第i支队伍能够参加第j轮比赛的概率。

  找出答案:

    i of max dp[i][n+1]

    n轮比赛后,冠军该参加第n+1轮比赛(不存在的)。

  如何转移:

    now: dp[i][j]

    dp[i][j+1] = ∑ (dp[i][j] * dp[k][j] * p[i][k]) (加法原理)

    k: 第j轮比赛和i比的队伍

    P(i晋级到j+1轮) = ∑ (P(i晋级到j轮) * P(k晋级到j轮) * P(i打败k))

    怎样枚举k:

      将所有队伍从0开始编号,并用二进制表示。

      第i支战队第j轮会碰到的对手是:将i化为二进制,从右往左开始算,第j-1位会不同,第j位开始要相同,其余位任意的所有数。

  边界条件:

    dp[i][1] = 1
    others = 0

  注:本题居然卡cin。。。 (*`皿´*)ノ

AC Code:

 // state expression:
// dp[i][j] = probability to win
// i: which team
// j: which round
//
// find the answer:
// i of max dp[i][n+1]
//
// transferring:
// dp[i][j+1] = sigma (dp[i][j] * dp[k][j] * p[i][k])
// 0<=t<(1<<(j-1))
// k = (((i>>(j-1))^1)<<(j-1))|t
//
// boundary:
// dp[i][1] = 1
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 10
#define MAX_T 150 using namespace std; int n;
int ans;
double p[MAX_T][MAX_T];
double dp[MAX_T][MAX_N]; void read()
{
for(int i=;i<(<<n);i++)
{
for(int j=;j<(<<n);j++)
{
scanf("%lf",&p[i][j]);
}
}
} void solve()
{
memset(dp,,sizeof(dp));
for(int i=;i<(<<n);i++)
{
dp[i][]=;
}
for(int j=;j<=n;j++)
{
for(int i=;i<(<<n);i++)
{
for(int t=;t<(<<(j-));t++)
{
int k=((((i>>(j-))^)<<(j-))|t);
dp[i][j+]+=dp[i][j]*dp[k][j]*p[i][k];
}
}
}
double maxn=;
for(int i=;i<(<<n);i++)
{
if(dp[i][n+]>maxn)
{
maxn=dp[i][n+];
ans=i+;
}
}
} void print()
{
printf("%d\n",ans);
} int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==-) break;
read();
solve();
print();
}
}

POJ 3071 Football:概率dp的更多相关文章

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

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

  2. POJ 3071 Football(概率DP)

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

  3. poj 3071 Football(概率dp)

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

  4. POJ 3071 Football (概率DP)

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

  5. POJ 3071 Football

    很久以前就见过的...最基本的概率DP...除法配合位运算可以很容易的判断下一场要和谁比.    from——Dinic算法                         Football Time ...

  6. POJ3071:Football(概率DP)

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

  7. POJ 3156 - Interconnect (概率DP+hash)

    题意:给一个图,有些点之间已经连边,现在给每对点之间加边的概率是相同的,问使得整个图连通,加边条数的期望是多少. 此题可以用概率DP+并查集+hash来做. 用dp(i,j,k...)表示当前的每个联 ...

  8. poj 1322 Chocolate (概率dp)

    ///有c种不同颜色的巧克力.一个个的取.当发现有同样的颜色的就吃掉.去了n个后.到最后还剩m个的概率 ///dp[i][j]表示取了i个还剩j个的概率 ///当m+n为奇时,概率为0 # inclu ...

  9. [poj3071]football概率dp

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

随机推荐

  1. [转载]使用RoboCopy 命令

    经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...

  2. CentOS 6.5语言包裁剪

    https://www.ibm.com/developerworks/cn/linux/l-cn-linuxglb/ 浅析 Linux 的国际化与本地化机制 Linux 是一个国际化的操作系统,它的工 ...

  3. erlang中字符编码转换(转)

    转自:http://www.thinksaas.cn/group/topic/244329/ 功能说明: erlang中对各种语言的编码支持不足,此代码是使用erlang驱动了著名的iconv编码库来 ...

  4. JavaScrip函数与声明表达式

    首先我们看下函数的两种命名方式 1.函数声明,声明一个函数 function test1(){ var a=0; console.log(a); //左一些操作... } 执行结果如下 我们看一下,无 ...

  5. Unity3D研究院编辑器之脚本设置ToolBar及脚本设置顶视图

    Unity版本5.3.2 如下图所示,ToolBar就是Unity顶部的那一横条.这里的所有按钮一般情况下都得我们手动的用鼠标去点击.这篇文章我们说说如果自动操作它们 1.自动点击左边四个按钮 (拖动 ...

  6. Swift实战(一): 剪子包袱锤ios应用

    来自十奶的大作业教学视频. http://www.swiftv.cn/course/ic2tqzob 主要了解了MVC模型. 首先是View,通过设计mainstoryboard构建UI界面,主要靠拖 ...

  7. MySQL 忘记密码解决办法

    第一步: 关闭MySQL服务.  第二步: 打开DOS窗口,在里面输入安装MqSQL的目录本机为:C:\Program Files\MySQL\MySQL Server 5.6\bin 第三步: 在命 ...

  8. delphi视频聊天

    用Delphi开发视频聊天软件 一.引言 我们知道视频聊天软件的关键技术在于采集视频,并实时传输给聊天软件在线的人.对于视频的采集,这里采用微软公司的关于数字视频的一个软件包VFW(Video for ...

  9. android菜鸟学习笔记8----Activity(一)

    Activity是android应用程序中重要的组件之一,常听到的android四大组件是Activity.Service.BroadcastReceiver和ContentProvider.它间接继 ...

  10. HTML 学习笔记 JQuery(DOM 操作3)

    设置和获取HTML 文本 和 值 1.html()方法 类似于JavaScript中的innerHTML属性,可以用来读取或者设置某个元素中的HTML内容 例子 <html> <he ...