【POJ3071】Football(概率dp)
来源:互联网 发布:mac隐藏文件怎么恢复 编辑:程序博客网 时间:2024/04/29 06:07
题目:
我是超链接
题意:
有2^n个队,相邻两两打淘汰赛,求最后哪个队夺冠的概率最大
题解:
dp[i][j]表示第i轮比赛,j队赢的几率
dp[i][j]=Σ(dp[i-1][k]*dp[i-1][j]*f[j][k]) 上一场j的对手k必须赢了
那谁可以成为j的对手呢?
可以用位运算解决,0^1=1 1^1=0
如果他们早就应该比过赛了,那么x<<(i-1)==y<<(i-1)
如果太远就配不上对
只有^1是完美的配对才ok
代码:
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int n,i,j,k;double f[1024][1024],dp[1024][1024];int main(){while (scanf("%d",&n)){if (n==-1) return 0;for (i=1;i<=(1<<n);i++) for (j=1;j<=(1<<n);j++) scanf("%lf",&f[i][j]);memset(dp,0,sizeof(dp));for (i=1;i<=(1<<n);i++) dp[0][i]=1;for (i=1;i<=n;i++) for (j=1;j<=(1<<n);j++) for (k=1;k<=(1<<n);k++) if ((((j-1)>>(i-1))^1)==(((k-1)>>(i-1)))) dp[i][j]+=dp[i-1][k]*dp[i-1][j]*f[j][k];double ans=0;int ai=0;for (i=1;i<=(1<<n);i++) if (ans<dp[n][i]) { ans=dp[n][i]; ai=i; }printf("%d\n",ai);}}
阅读全文
0 0
- [POJ3071]Football(概率dp)
- 【POJ3071】Football(概率dp)
- POJ3071:Football(概率DP)
- Football(poj3071,概率DP)
- POJ3071 Football 【概率dp】
- POJ3071-Football(概率DP+滚动数组)
- poj3071--Football(概率计算)
- poj3071(概率DP)
- 树型dp poj3071 Football
- poj3071(概率DP)
- poj3071之概率DP
- poj3071(概率DP)
- poj3071(概率dp)
- poj3071(概率dp)
- POJ3071 概率DP
- poj3071 概率dp
- poj3071 概率dp
- POJ3071 Football
- S5720DHCP举例(s5700只能配一个vlanif接口,配置其他vlanif接口做DHCP地址池)
- 算术编码
- 单菌基因组测序常见问题
- 2017.7.3 关于项目启动问题解决
- 未能打开编辑器:未能实例化编辑器类。这通常表示缺少了 no-arg 构造函数,或在 plugin.xml 中错误?
- 【POJ3071】Football(概率dp)
- 现代c++之移动构造, 移动赋值, 拷贝构造, 拷贝赋值
- 在移动设备上高速高精度的人脸识别:MobileId
- 引用_const_指针
- mongodb 数据操作
- Android 从入门到资深学习路线
- 寻找主元素
- 6 ZigZag Conversion
- 高斯消元