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. 024 01 Android 零基础入门 01 Java基础语法 03 Java运算符 04 关系运算符

    024 01 Android 零基础入门 01 Java基础语法 03 Java运算符 04 关系运算符 本文知识点:Java中的关系运算符 关系运算符

  2. Linux下彻底删除安装的rpm包

    如何彻底Linux系统下安装的rpm包?现以mySQL为例进行介绍: 一.使用以下命令查看mysql安装情况 [root@xpq mysql]# rpm -qa|grep -i mysql MySQL ...

  3. c语言 static的用法

    static在c里面可以用来修饰变量,也可以用来修饰函数.先看用来修饰变量的时候.变量在c里面可分为存在全局数据区.栈和堆里.其实我们平时所说的堆栈是栈而不是堆,不要弄混.int a ;int mai ...

  4. 【学习笔记】Polya定理

    笔者经多番周折终于看懂了\(\text{Burnside}\)定理和\(\text{Polya}\)定理,特来写一篇学习笔记来记录一下. 群定义 定义:群\((G,·)\)是一个集合与一个运算·所定义 ...

  5. 50个你必须了解的Kubernetes面试问题

    Kubernetes一直是当今业界的流行语,也是最好的编排工具.它吸引了许多想要提升自己职业生涯的经验丰富的专业人士.HuaWei,Pokemon,Box,eBay,Ing,Yahoo Japan,S ...

  6. Croppie -一个Javascript图像Croppie

    下载 Croppie -一个Javascript图像CroppieCroppie -一个Javascript图像Croppie 安装 凉棚:凉棚安装作物 Npm: Npm安装作物 下载: croppi ...

  7. JVM(五):JVM模型与GC

    确定垃圾 引用计数(存在循环引用问题) 根可达算法 常见的垃圾回收算法 标记清除算法-位置不连续,产生碎片 拷贝算法- 没有碎片,浪费空间 标记压缩-没有碎片,效率偏低(多线程需要进行线程同步,单线程 ...

  8. day33 Pyhton 常用模块03

    一.正则表达式: 1.元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \n 匹配一个换行符 \t 匹配一个制表符 \b 匹配一个单词的结尾 ...

  9. 单调队列优化题:最大数(P1198)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:不超过当前数列的长度.(L>0) ...

  10. DockerFile系统的学习

    1.背景 DockerFile定义:用来构建Docker镜像的文件,有脚本命令组成. 自定义镜像并运行步骤:编写dockerFile文件-->docker build为镜像-->docke ...