POJ 3701 概率DP
给定2^n 支足球队进行比赛,n<=7. 队伍两两之间有一个获胜的概率,求每一个队伍赢得最后比赛的概率是多少?
状态其实都是很显然的,一开始觉得这个问题很难啊,不会。dp[i][j] 表示第i支队伍赢得前j轮比赛的概率。(这个题目处理区间的时候比较恶心,小心点即可)。
1:
2: #include <iostream>
3: #include <cstdio>
4: #include <cstring>
5: #include <map>
6: #include <algorithm>
7: using namespace std;
8:
9: double p[135][135];
10: double dp[135][10];
11:
12: pair<int,int> range(int idx, int round)
13: {
14: int x = (idx>>round) ^1;
15: return make_pair(x<<round, (x<<round) + (1<<(round)) - 1);
16: }
17: int main()
18: {
19: // freopen("1.txt","r",stdin);
20: int n;
21: while(cin>>n && n !=-1)
22: {
23: for(int i=0; i<(1<<n); i++)
24: {
25: for(int j=0; j<(1<<n); j++)
26: {
27: cin>>p[i][j];
28: }
29: }
30: memset(dp,0,sizeof(dp));
31: for(int i=0; i< (1<<n); i++)
32: {
33: dp[i][0] = p[i][i^1];
34: }
35: for(int round=1; round<n; round++) // round
36: {
37: for(int j=0; j< (1<<n); j++)
38: {
39: pair<int,int> r = range(j, round);
40: for(int k = r.first; k<= r.second; k++)
41: {
42: dp[j][round] += p[j][k] *dp[k][round - 1]*dp[j][round-1];
43: }
44: }
45: }
46: int idx = -1;
47: double ret = 0;
48: double sum = 0;
49: for(int i=0; i<(1<<n); i++)
50: {
51: sum+= dp[i][n-1];
52: if(dp[i][n-1] > ret)
53: {
54: idx = i;
55: ret = dp[i][n-1];
56: }
57: }
58: cout<<idx+1<<endl;
59: }
60: }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
POJ 3701 概率DP的更多相关文章
- POJ 2096 (概率DP)
题目链接: http://poj.org/problem?id=2096 题目大意:n种bug,s个子系统.每天随机找一个bug,种类随机,来自系统随机.问找齐n种bug,且每个子系统至少有一个bug ...
- POJ 2151 概率DP
主要的子问题是每一个队伍有一个做出题目的概率,求做出k个题目的概率.简单的简单的组合数DP.想清楚即可. 1: #include <iostream> 2: #include <cs ...
- Scout YYF I POJ - 3744(概率dp + 矩阵快速幂)
题意: 一条路上有n个地雷,你从1开始走,单位时间内有p的概率走一步,1-p的概率走两步,问安全通过这条路的概率 解析: 很容易想到 dp[i] = p * dp[i-1] + (1 - p) * d ...
- poj 3071 概率dp
转自:cxlove 题目:有2^n个队,相邻的两两打淘汰赛,,求最后哪个队夺冠的概率最大 dp[i][j]表示第i轮的时候,第j去支队伍赢的概率. 那么dp[i][j]的前提就是i-1轮的时候,j是赢 ...
- poj 3744 概率dp+矩阵快速幂
题意:在一条布满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...
- Check the difficulty of problems - poj 2151 (概率+DP)
有 T(1<T<=1000) 支队伍和 M(0<M<=30) 个题目,已知每支队伍 i 解决每道题目 j 的的概率 p[i][j],现在问:每支队伍至少解决一道题,且解题最多的 ...
- poj 2151 概率DP(水)
Check the difficulty of problems Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5750 ...
- poj - 2096 概率dp (找bug)
题意:一个人一天只能找1个bug ,这个bug属于s个子系统中的某一个子系统,属于n种bug 中的某一种 ,求 这个人找出n种bug ,并且s个系统都bug的期望 (每个系统的一定可以找出bug) 一 ...
- poj 3744 概率dp 快速幂 注意排序 难度:2
/* Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5304 Accepted: 1455 De ...
随机推荐
- [改善Java代码]子列表只是原列表的一个视图
List接口提供了subList方法,其作用是返回一个列表的子列表.这与String类的subString有点类似.但是他们的功能是否相同?看代码: import java.util.ArrayLis ...
- [改善Java代码]不要在构造函数中抛出异常
Java的异常机制有三种: 一.Error类以及其子类表示的是错误,它是不需要程序员处理也不能处理的异常.比如VirtualMachineError虚拟机错误,ThreadDeath线程僵尸等. 二. ...
- javascript-函数进阶
一.函数定义 1.函数声明 function add(i,j){ return i+j; } 特点:1.函数声明定义函数会被前置.要知道在js代码执行时,会有一个预解析,预解析时会把变量声明.函数声明 ...
- 理解CPU内存管理
概述:从设计层面理解CPU的内存模式,包括段式内存管理.页式内存管理以及虚拟化扩展内存管理.实际上,硬件支持与软件实现从来就不是能分开讲的,比如,Intel CPU架构师在选择CPU的硬件特性时,必然 ...
- Swift静态属性
在介绍静态属性之前,我们先来看一个类的设计,有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名).在这3个属性中,am ...
- iOS的沙箱目录和文件操作
一.沙箱 iOS的每一个应用程序都有自己的目录来存放数据,这个目录称为沙箱目录.沙箱目录是一种数据安全策略,它设计的原理是只能允许自己的应用访问目录,而不允许其他的应用访问,这样可以保证数据的安全,应 ...
- C#调用dll时的类型转换总结
C++(Win 32) C# char** 作为输入参数转为char[],通过Encoding类对这个string[]进行编码后得到的一个char[] 作为输出参数转为byte[],通过Encodin ...
- Android的SharedPreferences实用技巧
转自:http://blog.csdn.net/jingfeizhu/article/details/10017779 SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XM ...
- OC5_类别
// // NSString+Reverse.h // OC5_类别 // // Created by zhangxueming on 15/6/16. // Copyright (c) 2015年 ...
- es5 和 es6 class
// ES5 function User(name,age) { this.name = name; this.age = age; } // 静态方法 User.getClassName = fun ...