XJOI 夏令营501-511测试11 游戏
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 游戏的更多相关文章
- XJOI夏令营501训练1——分配工作
传送门:QAQQAQ 题意:某公司有工作人员x1,x2,…,xn ,他们去做工作y1,y2,…,ym(n<=m) ,每个人都能做其中的几项工作,并且对每一项工作都有一个固定的效率.问能否找到一种 ...
- [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 ...
- DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- DirectX 11游戏编程学习笔记之1: 开场白
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 这是我之前的博客系列"DirectX9.0c游戏开发手记之'龙书'第二版学习笔记 ...
- XJOI 夏令营501-511测试11 统计方案
小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c.但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都找出来.你 ...
- test20190725 夏令营测试11
50+80+90=220.(每题满分90) 砍树 小A在一条水平的马路上种了n棵树,过了几年树都长得很高大了,每棵树都可以看作是一条长度为a[i]的竖线段.由于有的树过于高大,挡住了其他的树,使得另一 ...
- 网页颜色分辨测试小游戏的js化辨别及优化
相信大家都玩过一种网页游戏,通俗的可以叫颜色分辨测试游戏(这个名字对不对我也不知道,不要在意这些细节),也就是下面截图这个玩意,一看就明白:细细把玩过一段时间,作为一个一百米开外男女不分的弱视青年,每 ...
- Linux基础测试--11道题
000.创建一个目录/data mkdir /data 001.在/data 下面创建一个文件oldboy.txt touch /data/oldboy.txt 002.为oldboy.txt 增加内 ...
随机推荐
- c++缓冲区std::wstringbuf
参考:http://www.cplusplus.com/reference/sstream/wstringbuf/ class <sstream> std::wstringbuf type ...
- 通用redis
import lombok.extern.slf4j.Slf4j;import org.apache.poi.ss.formula.functions.T;import org.rcisoft.cor ...
- devops-jenkins-Pipeline实战
1) 配置gitlab的分支项目 点击红色标记的创建 project 项目 点击Create project创建Pipeline-demo项目 项目创建完成,然后我们创建一个Add README 然后 ...
- vscode 插件保存记录
- 【全网免费VIP观看】哔哩哔哩番剧解锁大会员-集合了优酷-爱奇艺-腾讯-芒果-乐视-ab站等全网vip视频免费破解去广告-高清普清电视观看-持续更新
哔哩哔哩番剧解锁大会员-集合了优酷-爱奇艺-腾讯-芒果-乐视-ab站等全网vip视频免费破解去广告-高清普清电视观看-持续更新 前言 突然想看电视,结果 没有VIP 又不想花钱,这免费的不久来啦. 示 ...
- 如何获取前端提交来得json格式数据
composer.json { "require": { "guzzlehttp/guzzle": "~6.0" } } composer ...
- nginx安全:修改对外的服务软件名称并隐藏版本号(nginx1.18.0)
一,为什么要隐藏nginx真实的软件名称? 1,nginx响应的Server头部都会携带上服务软件的名字和版本信息, 服务器软件的版本信息暴光在外部,很容易被黑客了解到,就通过相应版本的漏洞来攻击服务 ...
- pycharm2018.3.5 下载激活(windows平台)
软件下载: 百度网盘下载 提取码: 73p7 激活操作: 1.下载jar包 JetbrainsCrack-4.2-release-enc.jar 链接:https://pan.baidu.com/s/ ...
- Python函数名的应用和新特性格式化输出
1.函数名指向的是函数的内存地址. def func(): print(123) print(func,type(func)) # <function func at 0x000000000 ...
- VS2010下python3的配置
最近突然又想学python,但用惯了vs2010后,十分希望能在vs2010中编译python的程序,于是,秉承着不作到死就不死心的原则就开始了我的配置之旅.但事实上并不难哦?.... 1.首先上场的 ...