Luogu P3251 [JLOI2012]时间流逝 期望dp
题面
题解
期望\(dp\)好题!
今年\(ZJOI\)有讲过这题...
首先因为\(T\)只有\(50\),大力\(dfs\)后发现,可能的状态数最多只有\(20w\)左右,所以我们就可以大力爆搜了。
设\(dp_i\)为状态为\(i\)时达到目标的期望天数。
则\(dp_i=1+p*dp_{last_i}+(1-p)*\frac{1}{|next_i|}*\sum dp_{next_{i}}\)
其中\(last_{i}\)表示\(i\)删掉\(min\)的状态,\(next_{i}\)表示\(i\)再取一个能量圈的状态。
不难发现这样转移是一棵树。
我们尝试下能否把\(dp_i\)表示成\(kdp_{last_i}+b\)的形式。
先假装这个结论成立,则:\(dp_i=1+p*dp_{last_i}+(1-p)*\frac{1}{|next_i|}*\sum (kdp_i+b)\)
为方便设\(A=(1-p)*\frac{1}{|next_i|}\)
则原式可以表示为:\(dp_i=1+p*dp_{last_i}+A*\sum (kdp_i+b)\)
移项下得:\(dp_i-A*\sum (k*dp_i)=p*dp_{last_i}+A*\sum b\)
把\(dp_i\)的系数化为\(1\),得:\(dp_i=\frac{p}{1-A*\sum k}*dp_{last_i}+\frac{1+A*\sum b}{1-A*\sum k}\)
这样\(dp_i\)就成功的化成了\(k*dp_{last_i}+b\)的形式了。
初始状态不存在\(last_i\),所以\(b\)就是答案。
注意没有能量圈的时候是必定不会损失能量圈的。
还有就是因为我们只关心\(k\)和\(b\)的值,所以在\(dfs\)只要记录\(min\)和总和即可,不必关心具体拥有的能量圈情况是什么,也不必求出\(dp_i\)具体的值。
#include<bits/stdc++.h>
#define For(i,x,y) for (register int i=(x);i<=(y);i++)
#define Dow(i,x,y) for (register int i=(x);i>=(y);i--)
#define cross(i,u) for (register int i=first[u];i;i=last[i])
using namespace std;
typedef long long ll;
inline ll read(){
ll x=0;int ch=getchar(),f=1;
while (!isdigit(ch)&&(ch!='-')&&(ch!=EOF)) ch=getchar();
if (ch=='-'){f=-1;ch=getchar();}
while (isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
struct node{
double k,b;
};
int T,n,a[51];
double p;
inline node dfs(int sum,int Min){
if (sum>T) return (node){0,0};
double k=0,b=0;node t;
For(i,1,Min) t=dfs(sum+a[i],i),k+=t.k,b+=t.b;
double P=!sum?0:p,G=(1-P)*(1.0/Min);
return (node){p/(1-G*k),(1+G*b)/(1-G*k)};
}
int main(){
while (~scanf("%lf%d%d",&p,&T,&n)){
For(i,1,n) a[i]=read();
sort(a+1,a+1+n);
printf("%0.3lf\n",dfs(0,n).b);
}
}
Luogu P3251 [JLOI2012]时间流逝 期望dp的更多相关文章
- Luogu P1850 换教室(期望dp)
P1850 换教室 题意 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1\l ...
- luogu 6046 纯粹容器 期望dp
LINK:纯粹容器 一道比较不错的期望题目. 关键找到计算答案的方法. 容易发现对于每个点单独计算答案会好处理一点. 暴力枚举在第k轮结束统计情况 然后最后除以总方案数即可. 考虑在第k轮的时候结束 ...
- luogu P4321 随机漫游 期望dp 二进制 高斯消元
LINK:随机漫游 非常妙的一道题. 容易想到倒推期望. 设状态 f[i][j]表示到达第i个点 此时已经到达的集合为j能走到全集的期望边数. 只要求出来这个就能O(1)回答询问. \(f[i][j] ...
- 【Luogu】P2473奖励关(期望DP)
题目链接 逆推期望DP.设f[i][j]为1~i-1中吃到的宝物集合为j,在i~k轮能得到的最大期望分数. 如果不吃显然f[i][j]+=f[i+1][j]/n 如果吃就是f[i][j]+=max(f ...
- LUOGU P1291 [SHOI2002]百事世界杯之旅 (期望dp)
传送门 解题思路 期望$dp$.因为这个是期望步数,所以要倒着推.那么这道题就变得一脸可做了,设$f[i]$表示还有$i$张牌没有收集的期望,那么考虑再抽一张,有$(n-i)/n$的概率抽到抽过的牌, ...
- luogu P3830 [SHOI2012]随机树 期望 dp
LINK:随机树 非常经典的期望dp. 考虑第一问:设f[i]表示前i个叶子节点的期望平均深度. 因为期望具有线性性 所以可以由每个叶子节点的期望平均深度得到总体的. \(f[i]=(f[i-1]\c ...
- Luogu P1850 [NOIp2016提高组]换教室 | 期望dp
题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...
- 期望$DP$ 方法总结
期望\(DP\) 方法总结 这个题目太大了,变化也层出不穷,这里只是我的一点心得,不定期更新! 1. 递推式问题 对于无穷进行的操作期望步数问题,一般可用递推式解决. 对于一个问题\(ans[x]\) ...
- 概率和期望dp
概率和期望dp 概率和期望好神啊,完全不会. 网上说概率要顺着推,期望要逆着推,然而我目前做的概率期望题正好都与此相反2333 概率: 关于概率:他非常健康 初中概率题非常恐怖.现在来思考一道题: ...
随机推荐
- easyui的tab标签链接aspx页面引发全局刷新的问题解决方案
通过tree组件和tabs组件结合加载子页面窗体aspx,点击按钮页面全部重新加载,或整个跳到子窗体页面,解决方案:换一种结合iframe的方式做系统界面:在tree组件出替换掉设置href属性处为下 ...
- Docker入门与实践之 Dockerfile 语法详解
一.Dockerfile 概述 Dockerfile是docker程序的解释脚本文件,Dockerfile 是一条一条的指令,Docker程序将dockerfile中的一条条指令编译成Linux可执行 ...
- Structs2笔记①--structs的背景、structs2框架的意义、第一个helloworld
Struts2的背景 由出色稳定的框架struts1和webwork框架整合而来的 吸取了两大框架的优点 提高了开发的效率和规范性 更好的实现了MVC架构 解除了与servlet的强耦合性 使用str ...
- 第三次作业---excel导入数据库及显示(2)
发现第一次做的功能有点复杂,不能理解.而且第一次的想法是在页面上上传文件,连接并导入到数据库,并在页面上显示.后来才看到要求是直接在本地将数据导入数据库就行了,然后显示.所以才出现了一堆看不懂也解决不 ...
- 如何在服务器(centOS系统)上运行JavaWeb项目
在上次的结对作业中(如果您对这几句话一头雾水的话就请忽视掉吧),因为我们小组制作的是Web版本的项目,需要布置在服务器上才算完成.故申请了一个腾讯云服务器用于运行项目,在这个过程中了解了如何在服务器上 ...
- 深入理解Java虚拟机&运行时数据区
其中,程序计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭.
- Redis4.0 主从复制(PSYN2.0)
Redis4.0版本相比原来3.x版本,增加了很多新特性,如模块化.PSYN2.0.非阻塞DEL和FLUSHALL/FLUSHDB.RDB-AOF混合持久化等功能.尤其是模块化功能,作者从七年前的re ...
- VS提示“无法启动IIS Express Web服务器”的解决方法
有时在使用Visual Studio运行项目时,会提示“无法启动IIS Express Web服务器”,如图: 可以依次尝试以下方法(我的情况使用第一种就解决了): 1.可能原因:误操作执行了:Sc ...
- js对数组进行浅复制,深复制的方法
js 数组常用方法,数组的拷贝(不影响原数组),数组相等 置顶2017年07月17日 17:39:26 阅读数:4640 改变原数组的方法: pop();删除尾部的第一个元素并且返回这个元素: var ...
- 【win10】浏览器Chrome 和edge 体验对比与使用心得
(1)Google和edge都内置了PDF阅读器,不用特意安装PDF软件了.桌面上的PDF文件可以直接用这两个浏览器打开. 然后对比来看,清晰度上美观度上,Chrome要比edge好一些.因为edge ...