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;
}

转载于:https://www.cnblogs.com/2017gdgzoi44/p/11369277.html

CF464D World of Darkraft - 2相关推荐

  1. CF464D World of Darkraft - 2(期望DP)

    Roma 在游戏"World of Darkraft"(理论上应该是 World of darkcraft,MineCraft 的一个版本)找到一个新角色. R o m a \ma ...

  2. android网络编程_Android上的网络编程

    android网络编程 This article is a short foray into how I setup my development environment in on an Andro ...

  3. World of Darkraft(codeforces 138D)

    题意:有一个 n × m 的棋盘,每个点上标记了 L; R; X 中的一个 每次能选择一个没有被攻击过的点 (i; j),从这个点开始发射线,射线形状为: 1. 若字符是 L,向左下角和右上角发,遇到 ...

  4. CodeForces - 1321E World of Darkraft: Battle for Azathoth(二维偏序+线段树)

    题目链接:点击查看 题目大意:给出 n 个武器及花费,m 个防具及花费,以及 k 个怪物及属性,每个怪物的属性同样有着攻击力,防御力以及价值,初始时可以选择一个武器以及一个防具,如果此时的攻击力大于怪 ...

  5. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  6. 【数据结构】二维数点/二维偏序

    该内容需要有一定的数据结构基础,前置知识:二维前缀和.树状数组.线段树.扫描线等 二维数点的解法较多,可自行查找和学习其他解法 二维数点简介 二维数点又称二维偏序,它是这样一类问题,给出一个二维平面內 ...

最新文章

  1. Nature子刊:海大张晓华团队发现马里亚纳海沟微生物抵抗高压的新机制
  2. 简单实现ibatis的物理分页
  3. WCF的CommunicationObjectFaultedException异常问题
  4. 【Flutter】Flutter Gallery 官方示例简介 ( 项目简介 | 工程构建 )
  5. 前端一HTML:十八:元素的显示方式
  6. Netty私有栈协议
  7. 处理本地能登陆mysql但navicat连接不上的问题
  8. [SHOI2011]双倍回文 manacher
  9. 贪婪算法在求解最小生成树中的应用(JAVA)--Kruskal算法
  10. Serverless 实战 —— 函数计算 + Typescript 实践
  11. Qt Dialog捕捉鼠标移动事件
  12. 按不同vlan下发dhcp_Cisco三层交换上给不同Vlan配置不同的DHCP
  13. android 生成二维码_Java 生成二维码实战
  14. mysql是单核吗_一次单核CPU占用过高问题的处理
  15. eclipse安装svn服务器
  16. Java游戏程序设计教程 第2章 游戏设计的基本流程
  17. python编程练习-完美数
  18. dx逆向建模步骤_产品温度的逆向建模的系统和方法与流程
  19. 马尔可夫不等式 Markov's inequality
  20. 不可能得到的最短骰子序列

热门文章

  1. 微信小程序中setInterval使用的一些问题
  2. Django——Cookie
  3. 张云龙-一个程序员的成长之路 - 剖析别人,总结自己
  4. [NodeJs]如何用NodeJs查查谁没交作业
  5. PC 销量下滑原因多,Windows 10 背后在补刀?
  6. vc克罗斯方块c语言代码,球员推荐 | 欧冠赛季闪亮登场​,这些球员值得一看!​...
  7. 名下企业比老板刘强东还多,京东“最强女助理”张雱什么来头?
  8. java基础学习IO流之字节流 十一 -4
  9. 3d游戏开发实训结项总结
  10. java文明用语的检测_阿里祭出大器,Java代码检查插件