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. 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类

    078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...

  2. Java知识系统回顾整理01基础06数组04增强型for循环

    增强型for循环在遍历一个数组的时候会更加快捷 一.增强型for循环 注:增强型for循环只能用来取值,却不能用来修改数组里的值 public class HelloWorld { public st ...

  3. Batch批处理 间断向EXE发送参数

    参考:https://blog.csdn.net/wjz1029/article/details/45044033 找了很久的一种方法: 怎样向一个EXE 发送一个参数,得到反馈后,再向EXE发送一个 ...

  4. MySQL基础 :基本知识点大纲

  5. .NET Standard 来日苦短去日长

    作者:Richard 翻译:精致码农-王亮 原文:http://dwz.win/Q4h 自从 .NET 5 宣贯以来,很多人都在问这对 .NET Standard 意味着什么,它是否仍然重要.在这篇文 ...

  6. 多测试_mysql数据库_09

    什么是数据库? 是存放数据的电子仓库.以某种方式存储百万条,上亿条数据,供多个用户访问共享. 每个数据库都有一个或多个不同的api用于创建.访问,管理和复制所保存的数据. 数据库分关系型数据库和非关系 ...

  7. linux(centos8):安装配置consul集群(consul 1.8.4 | centos 8.2.2004)

    一,什么是consul? 1,Consul 是 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置. Consul 是分布式的.高可用的. 可横向扩展的   2,官方网站: h ...

  8. linux wget指定下载目录和重命名

    当我们在使用wget命令下载文件时,通常会需要将文件下载到指定的目录,这时就可以使用 -P 参数来指定目录,如果指定的目录不存在,则会自动创建. 示例: p.p1 { margin: 0; font: ...

  9. PyTorch常用参数初始化方法详解

    1. 均匀分布 torch.nn.init.uniform_(tensor, a=0, b=1) 从均匀分布U(a, b)中采样,初始化张量. 参数: tensor - 需要填充的张量 a - 均匀分 ...

  10. SELECT INTO与INSERT INTO SELECT用法

    SELECT INTO SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中: -- 创建 Websites 的备份,这种写法没走索引导致全表扫描 SELECT * INTO W ...