POJ 3071 概率DP
来源:互联网 发布:ibm人工智能 编辑:程序博客网 时间:2024/05/18 02:44
概率DP。 看起来不难?
然而挂了好几次。。。
题目:有2^n个队,相邻的两两打淘汰赛,,求最后哪个队夺冠的概率最大
http://poj.org/problem?id=3071
dp[i][j]表示第i轮的时候,第j去支队伍赢的概率。
那么dp[i][j]的前提就是i-1轮的时候,j是赢的,而且第i轮赢了对方
接下来就是找到第i轮的时候,他的可能队手
通过二进制可以发现规律,所有高位是一样的,第i位刚好相反,所以用位运算可以巧妙解决,见代码
dp[i][j]=sigma(dp[i-1][j]*dp[i-1][k]*p[j][k])
转自:http://blog.csdn.net/acm_cxlove/article/details/7921608
// by SiriusRen#include <cstdio>using namespace std;int n,ans;float a[128][128],f[128][8],jy;int main(){ scanf("%d",&n); start:jy=0; for(int i=0;i<1<<n;i++) for(int j=0;j<1<<n;j++) scanf("%f",&a[i][j]); for(int i=0;i<1<<n;i++)for(int j=1;j<=n;j++)f[i][0]=1,f[i][j]=0; for(int j=1;j<=n;j++) for(int i=0;i<1<<n;i++) for(int k=0;k<1<<n;k++) if(((i>>(j-1))^1)==(k>>(j-1))) f[i][j]+=f[i][j-1]*f[k][j-1]*a[i][k]; for(int i=0;i<1<<n;i++)if(f[i][n]>jy)jy=f[i][n],ans=i; printf("%d\n",ans+1); if(scanf("%d",&n)&&~n)goto start;}
0 0
- 【概率dp】POJ 3071
- poj 3071 概率dp
- POj 3071(概率dp)
- poj 3071 概率DP
- poj 3071 概率dp
- POJ 3071 概率DP
- POJ 3071 概率DP
- poj 3071 【概率dp】
- poj 3071 概率dp
- poj 3071 概率dp 求概率
- poj 3071 Football 概率dp
- POJ 3071 Football 概率DP
- poj 3071 football 概率dp
- poj 3071 Football(概率dp)
- POJ 3071 Football (概率DP)
- poj 3071 Football 概率dp
- Football - POJ 3071 概率dp
- POJ 3071 Football 概率dp
- 判断是否是有效的url
- Shell中让程序造死循环的几种方式
- nginx的通配符哈希表--ngx_hash_wildcard_t
- Docker双刃剑
- 数据结构实验之栈六:下一较大值(二)
- POJ 3071 概率DP
- test命令的用法[]
- #4.Linux的设备管理
- Disconf的disconf-web的管理端安装
- JAVA环境变量设置
- Django urls.py的集中
- refresh的停车场
- HDU Problem 2196 Computer【树的直径】
- HDU 4499 Cannon (DFS回溯)