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);}
}
转载于:https://www.cnblogs.com/zykykyk/p/9454604.html
Luogu P3251 [JLOI2012]时间流逝 期望dp相关推荐
- [JLOI2012]时间流逝
Luogu P3251 [JLOI2012]时间流逝 期望dp 题目描述 (简化版) 每天有两种情况. 1.每天,你可以(1-P概率)得到一个能量圈,但是对于新得到的相同的能量圈,它的能量不能大于你已 ...
- luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...
- WJMZBMR打osu! / Easy【期望dp】
>Link luogu P1365 >Description 有一个长度为 n 的仅由ooo,xxx,???三个字符组成的字符串 设字符串的分数为:其中长度为 aaa 的只包含 ooo 的 ...
- [洛谷 1365] WJMZBMR打osu! / Easy {期望DP}
题目 https://www.luogu.org/problemnew/show/P1365 解题思路 这是我做的第三道期望DP.跟前两道的不同之处,在于它连续的一段具有不确定性且没有给出n的范围.所 ...
- [洛谷CF235B] Let‘s Play Osu! {期望DP}
题目 https://www.luogu.org/problemnew/show/CF235B 解题思路 跟[洛谷 1654] OSU! {期望DP}一样. 代码 #include<cstdio ...
- [SCOI2008]奖励关(期望dp)
你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...
- 【bzoj4318】OSU! 期望dp
题目描述 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的0 ...
- 【loj6342】跳一跳 期望dp
题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...
- 【高斯消元】兼 【期望dp】例题
[总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $ ...
最新文章
- 漫画:对象是如何被找到的?句柄 OR 直接指针?
- UpdateProgress使用
- prototype.js 让你更深入的了解javascript的面向对象特性
- c++ template(4)基本技巧
- python paramiko模块下载_Python自动化运维实战:使用Python管理网络设备
- 乘基取整法是什么_深入理解计算机系统(六):进制间的转换原理
- google lab 深度学习_吴恩达、李飞飞等化身超级英雄!深度学习漫画第一卷现已开源...
- 【OpenCV学习笔记】【函数学习】十二(cvCanny()函数及其阈值设置的比较)
- axure6.5汉化最新正式破解版本下载(有注册码)
- c语言编程串级控制,组态王-串级控制
- 计算机团队霸气名称大全,霸气吃鸡游戏团队名字大全
- clickhouse中bitmap在用户标签,访客去重生产中使用及clickhouse建表null值数据类型处理
- 如何测试一个一次性水杯
- 数字逻辑复习(Wust)
- Xu_Learning_to_Restore_Low-Light_Images_via_Decomposition-and-Enhancement_CVPR_2020_paper
- 【计算机网络】湖科大微课堂笔记 p7-10 计算机网络体系结构:常见的计算机网络体系结构、必要性、分层思想、专业术语
- 字符串流stringstream--<sstream>
- c++实现文件传输之三:断点续传与多线程传输
- SharpDevelop浅析_1_AddInTree
- 引路蜂技术博客论坛开放
热门文章
- SyntaxHighlighter Evolved高亮插件的编程语言及语言别名对照表
- 数据科学家技能地铁图
- 人大经济论坛:统计学的一些经典教材
- linux 等待子线程退出,等待一组子线程退出的问题__线程_pthread_join_终止_pthread_detach_释放__169IT.COM...
- python错误代码40035_Python 创建XML
- 003_Color色彩
- 051_Unicode字符官方标准二
- 支付宝 php 返回false,支付宝php sdk验签rsaCheckV1不正确isSign一直返回false
- fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...
- 刘晓艳2021英语语法句型结构总结1之简单句型结构