某DP题目5
题意
一个游戏里有k种装备,一开始等级为1,每打败一个怪兽,会随机掉落一件一种类型的装备,它的等级为[1,t+1]中的随机一个数,t为当前佩戴的类型的装备的等级,若掉落t+1等级的装备,就会佩戴该装备,否则不换,然后卖掉不要的装备,卖掉等级为i的装备(任意类型)得到金币i。问打n次怪兽之后的期望金币数。 n <= 100000,k <= 100
分析
根据期望的线性性,k是没什么用的,我们可以划分为k个子问题,最后再乘上k就可以了。
设F[i][j]表示打了i只怪兽,当前装备等级为j时的概率,分类讨论。
捡到的装备是当前类型的,乘上1/k
1、打完i-1只怪兽时装备等级是j,即F[i-1][j]*j/(j+1)
2、打完i-1只怪兽时装备等级是j-1,即F[i-1][j-1]/j
捡到的不是当前类型的,即打完第i-1只怪兽时等级是j,即F[i-1][j]*k/(k+1)
综上:F[i][j] = (1/k)*(F[i-1][j]*j/(j+1)+F[i-1][j-1]/j)+(k/k+1)*F[i-1][j];
但是上面这个只是算概率的,要如何计算期望呢?
我们很容易发现,你只有打怪物才会掉装备,才能卖钱,因此可以在转移的时候叠加就好了
转移到i的状态都来自上一层,我们就以上一层的状态打怪兽来计算即可,当然也是计算当前类型的,即累加(1/k)*F[i-1][j]*(j/2+j/(j+1))
j/2怎么推出来的呢,你有1/(j+1)的概率掉1~j等级的装备,那么根据等差数列公式:(j+1)*j/2/(j+1) = j/2,而j/(j+1)的话就是得到了j+1等级的新装备,去卖掉旧的装备。
由于精度问题,强制做100次就够了。
程序
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream> using namespace std; const int maxn = ;
int n, k;
double f[][maxn]; int main()
{
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
scanf("%d %d", &n, &k);
for (int i = ; i <= n+; ++i)
f[][i] = ;
f[][] = 1.0;
double t = 1.0/k, ans = ;
int z = ;
for (int i = ; i <= n; ++i, z ^= )
for (int j = min(, i+); j >= ; --j)
{
f[z][j] = t*(f[z^][j]/(j+)*j+f[z^][j-]/j)
+ t*(k-)*f[z^][j];
ans += t*f[z^][j]*(0.5*j+double(j)/(j+));
}
ans *= double(k);
printf("%.10lf\n", ans);
return ;
}
某DP题目5的更多相关文章
- DP题目列表/弟屁专题
声明: 1.这份列表不是我原创的,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 10 ...
- dp题目列表
此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...
- dp题目
从别的地方看来,最近一直在啃DP,有个目标,更有动力了. 1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包; ...
- 插头DP题目泛做(为了对应WYD的课件)
题目1:BZOJ 1814 URAL 1519 Formula 1 题目大意:给定一个N*M的棋盘,上面有障碍格子.求一个经过所有非障碍格子形成的回路的数量. 插头DP入门题.记录连通分量. #inc ...
- 很好的一个dp题目 Codeforces Round #326 (Div. 2) D dp
http://codeforces.com/contest/588/problem/D 感觉吧,这道题让我做,我应该是不会做的... 题目大意:给出n,L,K.表示数组的长度为n,数组b的长度为L,定 ...
- 两道很好的dp题目【4.29考试】
A 问题描述: 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用I表示,反之这个位置是下降的,用D表示.如排列3,1,2,7,4,6,5可以表示为DIIDID. 现 ...
- 题目1453:Greedy Tino(dp题目)
题目链接:http://ac.jobdu.com/problem.php?pid=1453 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- 题目1452:搬寝室(dp题目)
题目链接:http://ac.jobdu.com/problem.php?pid=1452 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- 题目1042:Coincidence(最长公共子序列 dp题目)
题目链接:http://ac.jobdu.com/problem.php?pid=1042 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- 概率dp+期望dp 题目列表(一)
表示对概率和期望还不是很清楚定义. 目前暂时只知道概率正推,期望逆推,然后概率*某个数值=期望. 为什么期望是逆推的,例如你求到某一个点的概率我们可以求得,然后我们只要运用dp从1~n每次都加下去就好 ...
随机推荐
- Fiddler 抓包工具总结(转)
阅读目录 1. Fiddler 抓包简介 1). 字段说明 2). Statistics 请求的性能数据分析 3). Inspectors 查看数据内容 4). AutoResponder 允许拦截制 ...
- thinkphp中的验证器
- 很多人都没用过的轻量级Oracle数据库数据导出工具SQLLDR2——性能超赞
SQLLDR2 介绍 每周发表一篇数据库或大数据相关的帖子,敬请关注 1. 工具介绍 Sqluldr2(SQL * UnLoader 第二版)是灵活与强大的 Oracle 文本导出程序,已被大众使 用 ...
- GPS 与 北斗 初步对比
一.脉冲 GPS每秒可获得一次卫星星历电文,秒脉冲的误差服从正态分布,锁住的可用卫星达到四颗以上时,授时脉冲的1精度在100 ns以内:当锁住的可用卫星少于四颗时,解算方程组的信息不够充分,授时精度将 ...
- html5多媒体Video/Audio
video: 1.常见的视频格式 视频的组成部分:画面.音频.编码格式 视频编码:H.264.theora.VP8(google开源) 2.常见的音频格式 编码:AAC.MP3 ...
- Python 2 到 Python 3 的变化
1: commands 被 subprocess 所取代:举例 Python2中使用getoutput: >>> import commands >>> print ...
- Adminimize 插件:WordPress根据用户角色显示/隐藏某些后台功能
倡萌刚才分享了 WordPress根据用户角色隐藏文章/页面的功能模块(Meta Boxes),如果你还想根据不同用户角色显示或隐藏后台的某些功能,比如 顶部工具条.左边导航菜单.小工具.仪表盘.菜单 ...
- appium---【Mac】Appium-Doctor提示WARN:“applesimutils cannot be found”解决方案
报错提示“ applesimutils cannot be found”截图如下: 解决方案: brew tap wix/brew brew install applesimutils 再次执行app ...
- [实战]MVC5+EF6+MySql企业网盘实战(7)——文件上传
写在前面 周末了,在家继续折腾网盘,今天实现网盘文件的上传. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战] ...
- Error:Unable to make the module:***, related gradle configuration was not found. Please, re-import the Gradle project and try again.
打开idea的 View -> Tool Windows -> Gradle.然后点击 Refresh