id=3071">http://poj.org/problem?

id=3071

大致题意:有2^n个足球队分成n组打比赛。给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率。n次比赛的流程像这样

action=showproblem&problemid=2304">France \'98

问最后哪个队最可能得冠军。



思路:概率dp问题。ans[i][j]表示第i轮中j队获胜的概率。



#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#define LL long long
#define _LL __int64
#define eps 1e-8 using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 10; int n;
int m;
double a[130][130];
double ans[maxn][130];
int pow2[8] = {1,2,4,8,16,32,64,128}; void solve()
{
memset(ans,0,sizeof(ans));
int t,r; for(int i = 1; i <= m; i++)
{
if(i&1)
ans[1][i] = a[i][i+1];
else
ans[1][i] = a[i][i-1];
} for(int i = 2; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
r = pow2[i]; //周期
if(j % r == 0) t = j/r;
else t = j/r+1; if(j%r >= 1 && j%r <= r/2)
{
for(int k = t*r; ; k--)
{
if(k%r != 0 && k%r <= r/2)
break;
ans[i][j] += ans[i-1][j]*a[j][k]*ans[i-1][k];
}
} else
{
for(int k = (t-1)*r+1; ; k++)
{
if(k%r >= r/2+1)
break; ans[i][j] += ans[i-1][j]*a[j][k]*ans[i-1][k];
}
}
}
} } int main()
{
while(~scanf("%d",&n))
{
if(n == -1) break;
m = pow2[n]; for(int i = 1; i <= m; i++)
for(int j = 1; j <= m; j++)
scanf("%lf",&a[i][j]); solve(); double res = ans[n][1];
int pos = 1; for(int i = 2; i <= m; i++)
{
if(res < ans[n][i])
{
res = ans[n][i];
pos = i;
}
}
printf("%d\n",pos);
}
return 0;
}

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)

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

  4. POJ 3071 Football

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

  5. POJ3071:Football(概率DP)

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

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

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

  7. poj 1322 Chocolate (概率dp)

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

  8. [poj3071]football概率dp

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

  9. POJ 3071 Football:概率dp

    题目链接:http://poj.org/problem?id=3071 题意: 给定n,有2^n支队伍参加足球赛. 给你所有的p[i][j],表示队伍i打败队伍j的概率. 淘汰赛制.第一轮(1,2)两 ...

随机推荐

  1. 从零开始自己搭建复杂网络(以Tensorflow为例)

    从零开始自己搭建复杂网络(以MobileNetV2为例) tensorflow经过这几年的发展,已经成长为最大的神经网络框架.而mobileNetV2在经过Xception的实践与深度可分离卷积的应用 ...

  2. C# 各版本新特性

    C# 2.0 泛型(Generics) 泛型是CLR 2.0中引入的最重要的新特性,使得可以在类.方法中对使用的类型进行参数化. 例如,这里定义了一个泛型类: class MyCollection&l ...

  3. ​学会用各种姿势备份MySQL数据库

    学会用各种姿势备份MySQL数据库 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复 ...

  4. TcxGrid 调整列位置的事件

  5. pip安装显示 is not a supported wheel on this platform.

    之前电脑安装的是python3.4,因为需要安装了python2,在用:LFD 安装whl是,每次都会提示 whl  is not a supported wheel on this platform ...

  6. SCU 4444: Travel(最短路)

    Travel The country frog lives in has n towns which are conveniently numbered by 1,2,…,n . Among n(n− ...

  7. matlab进阶

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

  8. SqlServer 中查询子节对应的上级自定义函数

    CREATE FUNCTION [dbo].[FN_TopGetOrgByUserName] ( @UserName NVARCHAR(128) ) RETURNS @showOrg TABLE(id ...

  9. CAS单点登录流程

    CAS的官方站点: https://apereo.github.io/cas/5.2.x/index.html 概念解读: The TGT (Ticket Granting Ticket), stor ...

  10. Java编程的逻辑 (52) - 抽象容器类

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...