POJ 3071 Football:概率dp
题目链接: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的更多相关文章
- poj 3071 Football (概率DP水题)
G - Football Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- POJ 3071 Football(概率DP)
题目链接 不1Y都对不住看过那么多年的球.dp[i][j]表示i队进入第j轮的概率,此题用0-1<<n表示非常方便. #include <cstdio> #include &l ...
- poj 3071 Football(概率dp)
id=3071">http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率 ...
- POJ 3071 Football (概率DP)
概率dp的典型题.用dp[j][i]表示第j个队第i场赢的概率.那么这场要赢就必须前一场赢了而且这一场战胜了可能的对手.这些都好想,关键是怎么找出当前要算的队伍的所有可能的竞争对手?这个用异或来算,从 ...
- POJ 3071 Football
很久以前就见过的...最基本的概率DP...除法配合位运算可以很容易的判断下一场要和谁比. from——Dinic算法 Football Time ...
- POJ3071:Football(概率DP)
Description Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, …, 2 ...
- POJ 3156 - Interconnect (概率DP+hash)
题意:给一个图,有些点之间已经连边,现在给每对点之间加边的概率是相同的,问使得整个图连通,加边条数的期望是多少. 此题可以用概率DP+并查集+hash来做. 用dp(i,j,k...)表示当前的每个联 ...
- poj 1322 Chocolate (概率dp)
///有c种不同颜色的巧克力.一个个的取.当发现有同样的颜色的就吃掉.去了n个后.到最后还剩m个的概率 ///dp[i][j]表示取了i个还剩j个的概率 ///当m+n为奇时,概率为0 # inclu ...
- [poj3071]football概率dp
题意:n支队伍两两进行比赛,求最有可能获得冠军的队伍. 解题关键:概率dp,转移方程:$dp[i][j] + = dp[i][j]*dp[i][k]*p[j][k]$表示第$i$回合$j$获胜的概率 ...
随机推荐
- Solidworks如何制作动画1
1点击窗口下方的"运动算例1"可以弹出动画的面板,右击该"运动算例1"还可以对这个动画窗口重命名等操作. 2 我们从最简单的动画开始,假设图示装配体,想要把它从 ...
- hosts.allow、hosts.deny无效查看服务是否支持tcp_Wrappers
通过配置hosts.allow.hosts.deny,控制SSH限制固定IP登陆 按照以往的方法,分别在hosts.allow.hosts.deny加入以下配置 # more /etc/hosts.a ...
- npm安装package.json
npm安装package.json时,直接转到当前项目目录下,用命令npm install 或npm install --save-dev安装即可,自动将package.json中的模块安装到node ...
- Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈.可以实现用户主平台数据通过SDIO口到无线网络之间的转 ...
- HDU 2255 奔小康赚大钱 KM裸题
#include <stdio.h> #include <string.h> #define M 310 #define inf 0x3f3f3f3f int n,nx,ny; ...
- Java中的Enum的继承
public interface Icolor{ int apply(int x,int y); } public enum color implements Icolor{ plus("+ ...
- FTP匿名登录或弱口令漏洞及服务加固
漏洞描述 FTP 弱口令或匿名登录漏洞,一般指使用 FTP 的用户启用了匿名登录功能,或系统口令的长度太短.复杂度不够.仅包含数字.或仅包含字母等,容易被黑客攻击,发生恶意文件上传或更严重的入侵行为. ...
- 杂谈:HTML 5的消息通知机制
译文来源:http://www.ido321.com/1130.html 原文:HTML 5 Notification 译文:HTML 5 的消息通知机制 译者:dwqs watermark/2/te ...
- PHP服务端如何通过程序将图上传到指定的图片服务器与图片服务器的优化方案
一:PHP服务端如何通过程序将图上传到指定的图片服务器与图片服务器的优化方案 (1) php服务器把图片处理成缩率图或指定大小的图片在通过PHP程序代码 操作FTP 上传到图片服务器. 二:图片服务器 ...
- android 关于ScrollView 的博客做记录学习
1.Android ScrollView向上滑动控件顶部悬浮效果实现 2.[android]仿知乎ScrollView滚动改变标题栏透明度 3.github开源Android组件资源整理(五)Scro ...