概率dp poj 3071
题目首先给出一个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的更多相关文章
- 矩阵快速幂+概率DP poj 3744
题意:在一条不满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...
- 概率dp poj 2151
题意: 这道题目的意思很简单,有t个ACM队,m个题目,题目给出了每个队对每个题目做出的概率大小(0到1之间,包含0和1),要求每个队至少做出一道题(签到题),同时,要求获胜队必须至少能够做出n道题( ...
- 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)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 概率dp的边界处理 POJ 2096
题目地址:https://vjudge.net/problem/POJ-2096 说的是有n个bug,和s个系统.现在一个人一天能发现一个bug,它可能是任何一个系统中的,也可能会发现已经发现过的bu ...
- 【POJ】2151:Check the difficulty of problems【概率DP】
Check the difficulty of problems Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8903 ...
- POJ 2096 Collecting Bugs (概率DP,求期望)
Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...
- POJ 2096 Collecting Bugs (概率DP)
题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...
随机推荐
- Wannafly Camp 2020 Day 1H 最大公约数 - 质因数分解,高精度
把每个质因子扒出来乱搞一下 #include <bits/stdc++.h> using namespace std; int g[505][505]; int isp[505]; str ...
- javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
这个错误的原因是没有项目使用到了Tomcat中配置的数据源(但是你本地没有配置),关于什么是JNDI看这篇文章就够了® 今天导入一个项目(比较老的),在本地运行时报错: Cannot resolve ...
- SpringMVC起步
SpringMVC: SpringMVC是Spring的一个组件,作为控制器,可以替代Servlet SpringMVC的开发过程: 请求发送 DispatcherServlet查询一个或多个Hand ...
- AttributeError: 'SQLAlchemy' object has no attribute 'Foreignkey'
在学习<Flask Web开发----基于Python的Web应用开发实战>的过程中,调试程序,如下图,运行报错: AttributeError: 'SQLAlchemy' object ...
- Copy Paste DWG to older 3ds Max
Hi, This is quick tutorial: how to install Auto Cad scripts to be able to copy from newer Auto Cad t ...
- Controller-->View传值的几种方法
Controller --- > View 传值的方法 ViewBag ViewData TempData 向普通View页面传一个Model对象 向强类型页面传传一个Model对象 用一个Vi ...
- Python入门7 —— 赋值运算符补充
增量赋值 x = 10 x += 1 #就是:x = x+1 交叉赋值 a = 10 b = 20 print(a,b) temp=b # temp=20 b=a # b = 10 a=temp # ...
- 浅析State-Thread
State-Thread(以下简称st),是一个由C语言编写的小巧.简洁却高效的开源协程库.这个库基于单线程运作.不强制占用用户线程,给予了开发者最大程度的轻量级和较低的侵入性.本篇文章中,网易云信音 ...
- vue+muse-ui
1.可以很好的配合vue2.0开发 2.安装: npm install muse-ui --save 3.引入: 在main.js中加入 import Vue from 'vue' import M ...
- Android 验证APK签名对比
最近OTT制定产品,其中有一条需求是只能安装自己公司签名的APK,所以在网上找了相关资料,最后总结功能实现如下: 1.签名错误码frameworks/base/core/java/android/co ...