CF464D World of Darkraft - 2
Roma 在游戏“World of Darkraft”(理论上应该是 World of darkcraft,MineCraft 的一个版本)找到一个新角色。 \(\mathrm{Roma}\) 有 k种装备,一开始每种装备各有 1个,且每种装备的初始等级均为 1。
游戏中可以靠打怪来获取新装备,总共有 n 只怪兽,每打赢 1 只怪兽后,\(\mathrm{Roma}\) 会随机获得一种装备 \(a\) (a∈[1,k]),假设原有的 a 装备的等级为 t,那么新获得的装备的等级为 [1,t+1],\(\mathrm{Roma}\) 会将新获得的装备和原来的装备中等级较高的装备留下,等级较低的装备卖出,卖出可获得的金币为该装备的等级。 问打完这 n只怪兽后,\(\mathrm{Roma}\) 获得的金币的期望。 \(1<=n<=10^5,1<=k<=10^3\)
Sample Input
input1
1 3
input2
2 1
input3
10 2
Sample Output
output1
1.0000000000
output2
2.3333333333
output3
15.9380768924
这道题我们考虑概率DP
设dp[i][j]表示打赢只要求出了前i只怪兽后某种装备被替换后价值为j的期望。
为什么是某装备?
因为所有装备的期望值是相同的,所以我们只要求出一种装备的期望,再乘上k即可。
有两种情况:
1.爆出了等级为j+1的神装。(概率为\(1/(j+1)\))
dp[i][j]+=(dp[i-1][j-1]+j)/j+1。
2.只得到等级<=j的装备。(概率为\(j/(j+1)\))
dp[i][[j]+=(dp[i-1][j]+(j+1)/2)*j/(j+1);//因为1至j是等概率出现的,所以取平均(j+1)/2。
但是这样你打出来你会发现自己MLE或TLE了,为什么?
i过于大,j也过于大。
优化:1.dp[i][j]的更新只需要他前一个的情况,所以我们可以考虑用滚动数组记录。
2.因为这个状态的转移是会收敛的,所以j越大他所产生的变化就越小,最终小到可以忽略不计,所以j只用取到很小就可以当作答案用了(有很多神仙j取600就过了,不过保险起见最好取1000)。
#include<bits/stdc++.h>
using namespace std;
int n,k,s=1;
double dp[2][1010];
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++,s^=1)
{
for(int j=min(n,1000);j;j--)
{
dp[s][j]=((dp[s^1][j+1]+j)/(j+1.0)+(dp[s^1][j]+(j+1)/2.0)*j/(j+1.0))/double(k)+dp[s^1][j]*(k-1.0)/double(k);
}
}
printf("%.11lf\n",dp[s^1][1]*k);
return 0;
}
CF464D World of Darkraft - 2的更多相关文章
- [codeforces464D]World of Darkraft - 2 概率期望
D. World of Darkraft - 2 time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Codeforces 138D World of Darkraft
有一个n*m 的棋盘,每个点上标记了L,R,X 中的一个每次能选择一个没有被攻击过的点(i,j),从这个点开始发射线,射线形状为:1. 若字符是 L,向左下角和右上角发,遇到被攻击过的点就停下来2. ...
- 【Codeforces 464D】World of Darkraft - 2
Codeforces 464 D 首先我们知道这K个装备是互不干扰的,就是说如果一个装备升级了或者卖掉了,不会对其它装备的挣到的钱产生任何影响.所以我们就考虑单独处理某一个装备挣到的钱. 那么就设\( ...
- Codeforces 464D-World of Darkraft - 2
题意 有 \(n\) 个怪兽,\(k\) 种装备.最开始每个装备的等级都是 1 .每打完一个怪兽就会随机掉落一个装备. 随机的方式是,先等概率随机一个装备种类,设当前这个装备的等级为 \(t\) ,那 ...
- CF138D World of Darkraft
$ \color{#0066ff}{ 题目描述 }$ n*m的格子,每个格子有字符'L','R',X',初始可以选择所有格子. 当选了 'L'的格子时,当前格子左下右上这条线上所有点不能选; 当选了 ...
- Codeforces 138D World of Darkraft(Multi-Nim)
[题目链接] http://codeforces.com/problemset/problem/138/D [题目大意] H*W的棋盘中每个点都是L.R.X三者之一,两人轮流选一个点, 若为L则向左下 ...
- World of Darkraft(codeforces 138D)
题意:有一个 n × m 的棋盘,每个点上标记了 L; R; X 中的一个 每次能选择一个没有被攻击过的点 (i; j),从这个点开始发射线,射线形状为: 1. 若字符是 L,向左下角和右上角发,遇到 ...
- Codeforces 1321E World of Darkraft: Battle for Azathoth
题意 有\(n\)个武器,第\(i\)个武器攻击力为\(a_i\),价值\(ca_i\). 有\(m\)个防具,第\(i\)个防具防御力为\(b_i\),价值\(cb_i\). 有\(p\)个怪,第\ ...
- CF1320C World of Darkraft: Battle for Azathoth
线段树 又是熟悉的感觉,又是E题写完了,没调完,不过还好上了紫 CF1295E 可以发现可以打败怪兽的关系类似二维偏序 那么首先考虑第一维(武器)以攻击值($a_{i}$)进行排序 把所有的怪兽以防御 ...
随机推荐
- 踩坑踩坑之Flask+ uWSGI + Tensorflow的Web服务部署
一.简介 作为算法开发人员,在算法模块完成后,拟部署Web服务以对外提供服务,从而将算法模型落地应用.本文针对首次基于Flask + uWSGI + Tensorflow + Nginx部署Web服务 ...
- Java为什么需要四种引用?
首先抛出一个问题:在闲暇时间收拾自己家里的时候,对某一件物件要不要丢弃的问题上,是否有过食之无味,弃之可惜的感觉? 同样的,JVM在回收Java对象的时候,是否对对象实例也有食之无味,弃之可惜的感受? ...
- win10下VSCode+CMake+Clang+GCC环境搭建
win10下VSCode+CMake+Clang+GCC环境搭建 win10下VSCode+CMake+Clang+GCC环境搭建 安装软件 VSCode插件安装 新建文件夹, 开始撸代码 main. ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件
概述 在 <Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler> 中我们已经了解了 MessageHandler 的运行原理和使用方法 ...
- python编程基础之六
运算符和表达式 +,-,*,/, 加减乘除 %, 模运算 **, 幂运算 // 整除 运算优先级方面:** >正负号(+,-)>//,%>*,/>+,- 模运算有一 ...
- Centos 7.2天兔(Lepus 3.8)数据库监控系统部署
天兔(Lepus 3.8)数据库监控系统部署 转载自:https://blog.csdn.net/m0_38039437/article/details/79613260 一.安装LAMP基础环境 首 ...
- Vue中的循环以及修改差值表达式
0828自我总结 一.Vue中的循环 v-for 常见的4总情况 #第一种 <div v-for="item in items"></div> #第二种 & ...
- 线程封闭之栈封闭和ThreadLocal
线程封闭 在多线程的环境中,我们经常使用锁来保证线程的安全,但是对于每个线程都要用的资源使用锁的话那么程序执行的效率就会受到影响,这个时候可以把这些资源变成线程封闭的形式. 1.栈封闭 所谓的栈封闭其 ...
- window下 phpstorm 打不开
如果 window 上不能执行 strace 命令, 安装 Git Bash 工具. 切换到 phpstorm 安装的 bin 目录: D 盘的相关文件昨天被我删了!奇怪这文件怎么放到那里了? 换个路 ...
- composer依赖管理与laravel框架安装
步骤有点多,生怕哪一天忘记,记录下来会好点 laravel安装有两种途径:1.直接在一些国内第三方网站,如:https://www.golaravel.com/download/ 下载压缩包来解压即可 ...