题目首先给出一个n,表示比赛一共进行n轮,那么队伍就有2^n只队伍
输入一个2^n*2^n的矩阵,p[i][j]代表队伍i打败队伍j的概率
dp[i][j]代表第i轮比赛的时候,队伍j赢的概率
首先初始化时,dp[0][i]=1,在没有比赛时每个队伍都是赢的
dp[i][j]+=dp[i-1]j[*dp[i-1][k]*p[j][k]:要求j和k的上一轮都是赢家的概率再乘以本轮j打败k的概率
特别注意,队伍只能相邻的打,相邻的队伍转换成二进制时,高位相同,到第i位正好相反
可以用 if(((j>>(i-1))^1)==(k>>(i-1)))来判断,是否相邻,或者是下面代码中我所用的方法
因为最开始一轮两两相邻的打,只有二进制中的最后一位不一样,第二轮时,上一轮的赢家相邻的打,是第二位不一样
很巧妙

————————————————
版权声明:本文为CSDN博主「Cherry_0525」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41037114/article/details/81906416

 #include<cstdio>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
const int maxn=<<;
double p[maxn][maxn];
double dp[maxn][maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
if(n==-) break;
int len=<<n;
for(int i=;i<=len;i++)
for(int j=;j<=len;j++){
scanf("%lf",&p[i][j]);
}
memset(dp,,sizeof(dp));
for(int i=;i<=len;i++) dp[][i]=1.0;
for(int i=;i<=n;i++){
for(int j=;j<=len;j++)
for(int k=;k<=len;k++){
if((((j-)>>(i-))^)==((k-)>>(i-))) //这是一个判断相邻的操作。
dp[i][j]+=dp[i-][j]*dp[i-][k]*p[j][k]; }
}
double mx=0.0;
int ansbase=;
for(int i=;i<=len;i++)
if(dp[n][i]>mx){
mx=dp[n][i];
ansbase=i;
}
printf("%d\n",ansbase);
}
return ;
}

概率dp poj 3071的更多相关文章

  1. 矩阵快速幂+概率DP poj 3744

    题意:在一条不满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...

  2. 概率dp poj 2151

    题意: 这道题目的意思很简单,有t个ACM队,m个题目,题目给出了每个队对每个题目做出的概率大小(0到1之间,包含0和1),要求每个队至少做出一道题(签到题),同时,要求获胜队必须至少能够做出n道题( ...

  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)

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

  6. 概率dp的边界处理 POJ 2096

    题目地址:https://vjudge.net/problem/POJ-2096 说的是有n个bug,和s个系统.现在一个人一天能发现一个bug,它可能是任何一个系统中的,也可能会发现已经发现过的bu ...

  7. 【POJ】2151:Check the difficulty of problems【概率DP】

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8903   ...

  8. POJ 2096 Collecting Bugs (概率DP,求期望)

    Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...

  9. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

随机推荐

  1. url编码--url中含有空格问题

    开发web服务中,发现当url中含有空格时,会报 400 error: bad request sytanx,经分析,url中含有特殊字符时,服务端可能无法识别.如+,空格,/,?,%,#,& ...

  2. web服务器、Web中间件和Web容器的区别

    web服务器>web中间件>web容器 Tomcat(servlet容器)  是  Tomcat中间件  也是  Tomcat服务器 看了谢公子的csdn文章,让我彻底分清了这三者的区别. ...

  3. Oracle忘记用户名和密码

    Microsoft Windows [版本 10.0.16299.192](c) 2017 Microsoft Corporation.保留所有权利. C:\WINDOWS\system32>e ...

  4. javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

    这个错误的原因是没有项目使用到了Tomcat中配置的数据源(但是你本地没有配置),关于什么是JNDI看这篇文章就够了® 今天导入一个项目(比较老的),在本地运行时报错: Cannot resolve ...

  5. 算法竞赛入门经典第二版 TeX中的引号 P47

    #include<bits/stdc++.h> using namespace std; int main(){ ; while( (c = getchar()) !=EOF) //get ...

  6. cmake编译升级

    cmake的升级依赖于gcc版本,例如cmake 3.15.3依赖与gcc 4.8以上的版本 1)先升级gcc到4.8 参考:https://blog.csdn.net/Kangshuo2471781 ...

  7. mysql中循环插入数据

    循环插入1w条数据 表结构: mysql> desc time_table; +-------+-----------+------+-----+-------------------+---- ...

  8. sql查询——范围查询(区间查询)

    --范围查询(区间查询) --in() --查询年龄为18,28,38的人 select *from student where age=18 or age=28 or age=38; select ...

  9. NAND FLASH驱动框架以及程序实现

    1.NAND FLASH的硬件连接: 实验用的NAND FLASH芯片为K9F2G08U0C,它是三星公司的存储芯片,它的大小为256M.它的接线图如下所示: 它的每个引脚的分别为LDATA0-LDA ...

  10. 进程间通讯IPC的几种方式总结

    Linux进程间的通讯 Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同.前者对Unix早期的进程间通信 ...