Alice和Bob两个人正在玩一个游戏,游戏有很多种任务,难度为p的任务(p是正整数),有1/(2^p)的概率完成并得到2^(p-1)分,如果完成不了,得0分。一开始每人都是0分,从Alice开始轮流做任务,她可以选择任意一个任务来做;而Bob只会做难度为1的任务。只要其中有一个人达到n分,即算作那个人胜利。求Alice采取最优策略的情况下获胜的概率。

输入格式:

一个正整数n,含义如题目所述。

输出格式:

一个数,表示Alice获胜的概率,保留6位小数。

样例输入:

1

样例输出:

0.666667

数据范围:

对于30%的数据,n≤10
对于100%的数据,n≤500

时间限制:

1sec

空间限制:

128MB

 

概率DP

可以发现,对于每个游戏的状态,都是可以有前几个装态转移过来的

所以记dp[i][j]表示Ailce取得了i分,Bob取得了j分的最优概率

那么dp[n][j]($0\leq j< n$)=1,其他状态都为0

因为进行游戏时有可能失败,那么dp[i][j]可能转移到自己

那么对于转移方程,可以将dp[i][j]移项移到一边,进行转移

设当前选择p个游戏

$dp[i][j]=dp[i][j]*(1-\frac{1}{2^{p}})*\frac{1}{2}+dp[i+2^{p-1}][j]*\frac{1}{2^{p}}*\frac{1}{2}+dp[i][j+1]*(1-\frac{1}{2^{p}})*\frac{1}{2}+dp[i+2^{p-1}][j+1]*\frac{1}{2^{p}}*\frac{1}{2}$

$(\frac{1}{2}+\frac{1}{2^{p+1}})dp[i][j]=dp[i+2^{p-1}][j]*\frac{1}{2^{p}}*\frac{1}{2}+dp[i][j+1]*(1-\frac{1}{2^{p}})*\frac{1}{2}+dp[i+2^{p-1}][j+1]*\frac{1}{2^{p}}*\frac{1}{2}$

$dp[i][j]=\frac{dp[i+2^{p-1}][j]*\frac{1}{2^{p}}*\frac{1}{2}+dp[i][j+1]*(1-\frac{1}{2^{p}})*\frac{1}{2}+dp[i+2^{p-1}][j+1]*\frac{1}{2^{p}}*\frac{1}{2}}{\frac{1}{2}+\frac{1}{2^{p+1}}}$

然后对于每一个p,dp[i][j]取最大值即可

注意,此处是由较大的i,j推到较小的i,j,需要注意边界条件

#include <bits/stdc++.h>
using namespace std;
int n,z[20];
double dp[2010][2010];
int main()
{
scanf("%d",&n);
for (int i=0;i<=n;i++)
dp[n][i]=1;
z[0]=1;
for (int i=1;i<=15;i++)
z[i]=z[i-1]*2;
for (int i=n-1;i>=0;i--)
{
for (int j=n-1;j>=0;j--)
{
for (int p=1;p<=10;p++)
{
double now,r,sum=0;;
now=1/((double)z[p]);
r=1-0.5*(1-now);//r为转移方程的分母
sum=dp[min(i+z[p-1],n)][j]*now*0.5+dp[i][j+1]*(1-now)*0.5+dp[min(i+z[p-1],n)][j+1]*now*0.5;
dp[i][j]=max(dp[i][j],sum/r);
} }
}
printf("%.6lf\n",dp[0][0]);
}

XJOI 夏令营501-511测试11 游戏的更多相关文章

  1. XJOI夏令营501训练1——分配工作

    传送门:QAQQAQ 题意:某公司有工作人员x1,x2,…,xn ,他们去做工作y1,y2,…,ym(n<=m) ,每个人都能做其中的几项工作,并且对每一项工作都有一个固定的效率.问能否找到一种 ...

  2. [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法

    12.3 We have the following method used in a chess game: boolean canMoveTo( int x, int y). This metho ...

  3. DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)

            本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...

  4. DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)

            本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...

  5. DirectX 11游戏编程学习笔记之1: 开场白

    本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com           这是我之前的博客系列"DirectX9.0c游戏开发手记之'龙书'第二版学习笔记 ...

  6. XJOI 夏令营501-511测试11 统计方案

    小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c.但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都找出来.你 ...

  7. test20190725 夏令营测试11

    50+80+90=220.(每题满分90) 砍树 小A在一条水平的马路上种了n棵树,过了几年树都长得很高大了,每棵树都可以看作是一条长度为a[i]的竖线段.由于有的树过于高大,挡住了其他的树,使得另一 ...

  8. 网页颜色分辨测试小游戏的js化辨别及优化

    相信大家都玩过一种网页游戏,通俗的可以叫颜色分辨测试游戏(这个名字对不对我也不知道,不要在意这些细节),也就是下面截图这个玩意,一看就明白:细细把玩过一段时间,作为一个一百米开外男女不分的弱视青年,每 ...

  9. Linux基础测试--11道题

    000.创建一个目录/data mkdir /data 001.在/data 下面创建一个文件oldboy.txt touch /data/oldboy.txt 002.为oldboy.txt 增加内 ...

随机推荐

  1. Java知识系统回顾整理01基础01第一个程序06Eclipse使用技巧

    一.批量修改 ALT+SHIFT+R 二.快速输入主方法 1. 敲入main 2. alt+/ 三.快速输入System.out.println 1. 敲入syso 2. alt+/ 四.快速输入fo ...

  2. java多线程:线程池原理、阻塞队列

    一.线程池定义和使用 jdk 1.5 之后就引入了线程池. 1.1 定义 从上面的空间切换看得出来,线程是稀缺资源,它的创建与销毁是一个相对偏重且耗资源的操作,而Java线程依赖于内核线程,创建线程需 ...

  3. visual studio 2015 安装MSDN全称Microsoft Developer Network 安装离线的MSDN

    MSDN: 微软向开发人员提供的一套帮助系统,其中包含大量的开发文档,技术文章和示例代码. 这里介绍了vs2015 装离线的MSDN(说明一点是,如果不行,说明你的文件有缺陷,没安装好,之前我用vs2 ...

  4. Sprign-mvc系列之Spring快速入门 什么是sprign-mvc spring-mvc的作用及其基本使用+组件解析+注解解析

    Spring-mvc 什么是SpringMvc SpringMvc是一种基于java的实现Mvc设计模式的请求驱动类型的轻量级web框架,属于SpringFrameWork的后续产品,已经融合在Spr ...

  5. juc包:使用 juc 包下的显式 Lock 实现线程间通信

    一.前置知识 线程间通信三要素: 多线程+判断+操作+通知+资源类. 上面的五个要素,其他三个要素就是普通的多线程程序问题,那么通信就需要线程间的互相通知,往往伴随着何时通信的判断逻辑. 在 java ...

  6. 0xctf[No parameters readfile](魔改版[GXYCTF2019]禁止套娃)

    阅读本文前建议先阅读本站中的另一篇文章:[GXYCTF2019]禁止套娃 重要参考链接:http://www.heetian.com/info/827 Leon师傅魔改了[GXYCTF2019]禁止套 ...

  7. Docker笔记4:在 CentOS 上安装 Docker

    Docker 是一个开源的应用容器引擎,主要有两个分支,一个是社区免费版(Docker CE),一个是企业版(Docker EE). 第1步:系统环境要求 Docker 支持的 CentOS 版本: ...

  8. h2database在springboot中的使用

    h2为轻量级数据库,使用特别方便,它可以不使用数据库服务器,直接嵌入到java程序中.可以配置持久化,同样也可以不持久化(数据在内存中)进程结束后,数据就释放,用做测试和演示特别方便.自带后台管理,非 ...

  9. redis哨兵搭建

    redis哨兵搭建 1.复制配置文件到conf #单机安装以后[root@t3 redis-5.0.8]# pwd/app/redis-5.0.8[root@t3 redis-5.0.8]# cp s ...

  10. 一个故事看懂AI神经网络工作原理

    我是一个AI神经元 我是一个AI神经元,刚刚来到这个世界上,一切对我来说都特别新奇. 之所以叫这个名字,是因为我的工作有点像人类身体中的神经元. 人体中的神经元可以传递生物信号,给它输入一个信号,它经 ...