2018.08.30 游戏(概率dp)
题目描述
Alice 和 Bob 两个人正在玩一个游戏,游戏有很多种任务,难度为 p 的任务(p是正整数),有 1/(2^p) 的概率完成并得到 2^(p-1) 分,如果完成不了,得 0 分。一开始每人都是 0 分,从 Alice 开始轮流做任务,她可以选择任意一个任务来做;而 Bob 只会做难度为 1 的任务。只要其中有一个人达到 n 分,即算作那个人胜利。求 Alice 采取最优策略的情况下获胜的概率。
输入格式
一个正整数 n ,含义如题目所述。
输出格式
一个数,表示 Alice 获胜的概率,保留 6 位小数。
样例数据 1
输入
1
输出
0.666667
备注
【数据范围】
对于 30% 的数据,n≤10
对于 100% 的数据,n≤500
概率dp入门题吧。
令f[i][j]表示Alice拿i分,Bob拿j分时的最优概率。
假设这一轮Alice选择难度为p的任务,且2^p=k。
显然有
f[i][j]=f[i+k][j]/4k+f[i+k][j+1]/4k+f[i][j+1]∗(2k−1)/4k+f[i][j]∗(2k−1)/4k" role="presentation" style="position: relative;">f[i][j]=f[i+k][j]/4k+f[i+k][j+1]/4k+f[i][j+1]∗(2k−1)/4k+f[i][j]∗(2k−1)/4kf[i][j]=f[i+k][j]/4k+f[i+k][j+1]/4k+f[i][j+1]∗(2k−1)/4k+f[i][j]∗(2k−1)/4k
合并同类项之后变成了:
f[i][j]=(f[i+k][j]+f[i+k][j+1]+f[i][j+1]∗(2k−1))/(2k+1)" role="presentation" style="position: relative;">f[i][j]=(f[i+k][j]+f[i+k][j+1]+f[i][j+1]∗(2k−1))/(2k+1)f[i][j]=(f[i+k][j]+f[i+k][j+1]+f[i][j+1]∗(2k−1))/(2k+1)
代码:
#include<bits/stdc++.h>
#define N 505
using namespace std;
int n;
double f[N][N];
int main(){
cin>>n;
for(int i=0;i<=n;++i)f[n][i]=1.0;
for(int i=n-1;i>=0;--i)
for(int j=n-1;j>=0;--j){
double tmp=0.0;
for(int k=1;k/2<=n;k<<=1){
int l=min(k+i,n);
tmp=max(tmp,(f[l][j]+f[l][j+1]+f[i][j+1]*(2*k-1))/(2*k+1));
}
f[i][j]=tmp;
}
printf("%lf",f[0][0]);
return 0;
}
2018.08.30 游戏(概率dp)的更多相关文章
- [JLOI2013]卡牌游戏 概率DP
[JLOI2013]卡牌游戏 概率DP 题面 \(dfs\)复杂度爆炸,考虑DP.发现决策时,我们只用关心当前玩家是从庄家数第几个玩家与当前抽到的牌是啥.于是设计状态\(f[i][j]\)表示有\(i ...
- 【bzoj3191】[JLOI2013]卡牌游戏 概率dp
题目描述 n个人围成一圈玩游戏,一开始庄家是1.每次从m张卡片中随机选择1张,从庄家向下数个数为卡片上的数的人,踢出这个人,下一个人作为新的庄家.最后一个人获胜.问每个人获胜的概率. 输入 第一行包括 ...
- 2018.08.30 花园(期望dp)
题目背景 SCOI2017 DAY2 T1 题目描述 小 A 的花园的长和宽分别是 L,H .小 A 喜欢在花园里做游戏.每次做游戏的时候,他都先把花园均匀分割成 L×H 个小方块,每个方块的长和宽都 ...
- 2018.08.30 Tyvj1952 Easy(期望dp)
Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连 ...
- 2018.08.30 bzoj4318: OSU!(期望dp)
传送门 简单期望dp. 感觉跟Easy差不多,就是把平方差量进阶成了立方差量,原本维护的是(x+1)2−x2" role="presentation" style=&qu ...
- 2018.08.30 bzoj4720: [Noip2016]换教室(期望dp)
传送门 一道无脑的期望dp. 用f[i][j][0/1]表示前i堂课提出了j次申请且第i堂课没有(有)提出申请. 这样就可以状态转移了. 然而这题状态转移方程有点长... (主要是情况多... 代码: ...
- [luogu2059 JLOI2013] 卡牌游戏 (概率dp)
题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把 ...
- LOJ #2540. 「PKUWC 2018」随机算法(概率dp)
题意 LOJ #2540. 「PKUWC 2018」随机算法 题解 朴素的就是 \(O(n3^n)\) dp 写了一下有 \(50pts\) ... 大概就是每个点有三个状态 , 考虑了但不在独立集中 ...
- 2018.08.19 NOIP模拟 dp(二分+状压dp)
Dp 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 一块土地有 n 个连续的部分,用 H[1],H[2],-,H[n] 表示每个部分的最初高度.有 n 种泥土可用,他们都能覆盖连续 ...
随机推荐
- RAD 10.1多标签页bug
frm->Parent= ActiveControl取不到了 ::setparent(frm-> 多屏幕显示器,次副屏幕上无法最大化了. ::SetParent(myform->Ha ...
- hibernate 三种状态
JPA是Java Persistence API的简称,中文名Java持久层API. 因JPA是由Hibernate的创建者编写,因此和Hibernate基本相似一致.JPA由不同的服务解析,因此在w ...
- node 的exports 和module
文件05/** * Created by Mr.tiankong on 2017/3/24. */var People = require("./test/people.js"); ...
- taskset: 让进程运行在指定的CPU 上
观察发现4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态. 不了解Linux是如何调度的,但目前显然有优化的余地.除了处理正常任务,CPU#0还需要处理每秒网卡中断.因此,若能将 ...
- GitLab CI 之 Java HelloWrold
问题描述 测试人员想在gitalb上跑 JUnit项目,也就是java代码. 听到这个之后,我当时都懵了,我他妈gitlab的runner是为运行.net core 安装的呀.后来一想,是我错了,我用 ...
- 迷你MVVM框架 avalonjs 学习教程19、avalon历史回顾
avalon最早发布于2012.09.15,当时还只是mass Framework的一个模块,当时为了解决视图与JS代码的分耦,参考knockout开发出来. 它的依赖收集机制,视图扫描,绑定的命名d ...
- MS-SQL
变量 一个@为局部变量,两个@@为全局变量 @@error 最后一句SQL语句的错误编号 错误码 @@identity最后一次插入的标示值符 insert into biao(lie) output ...
- scala-学习 1
目录 变量定义 scala定义两种变量: var 可变 初始化之后,可以多次被重新赋值 val 不可变 一旦被初始化 就不能再赋值. var firstarg :java.lang.String = ...
- Group by 内部排序
1.right join # update_time gid=>sid, group_status => s_table select a.* from comment as a ri ...
- CentOS6.5下安装ActiveMQ
1.下载ActiveMQ [root@localhost softwares]# wget http://archive.apache.org/dist/activemq/apache-activem ...