[JLOI2012]时间流逝
Description:
你有n个食物,每个食物有\(a_i\)的价值,你每天有\(p_i\)的几率被抢走一个最小价值的食物,否则可以等概率获得所有食物中价值小于你拥有的食物中最大价值中的一个,问总价值达到T价值的期望天数
Hint:
\(n,T \le 50\)
Solution:
发现数据范围很小
考虑搜出所有状态
设\(dp[i]\)表示达到总能量为\(i\)的期望天数
转移方程:
\(dp[i]=p*dp_{last}+(1-p)*\frac{1}{|next|}\sum dp_{next_i}+1\)
但是这样有后效性,需要转化把\(dp_{next_i}\)表示为\(k*dp[i]+b\)的形式
设 \(G=(1-p)*\frac{1}{|next|}\)
\(dp[i]=p*dp_{last}+G*\sum( k*dp[i]+b)+1\)
整理得:
\(dp[i]=\frac{p}{1-G*\sum k}dp_{last} +\frac{1+G*\sum b}{1-G*\sum k}\)
于是就相当于一棵树,由0出发,用下面的状态递推出根的\(k\)和\(b\)
而根没有\(last\)状态,所以答案就是\(b\)
注意每个特判初始空状态
#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define ls p<<1
#define rs p<<1|1
using namespace std;
typedef long long ll;
inline int read() {
char c=getchar(); int x=0,f=1;
while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
while(c<='9'&&c>='0') {x=(x<<3)+(x<<1)+(c&15);c=getchar();}
return x*f;
}
inline int chkmax(int &x,int y) {if(x<y) x=y;}
inline int chkmin(int &x,int y) {if(x>y) x=y;}
int n,t,a[100];
double p;
struct data {
double k,b;
}tp,ans;
data dfs(int s,int mx) {
if(s>t) return (data){0.0,0.0};
double x=1.0/mx,nk=0,nb=0,pi=0;
for(int i=1;i<=mx;++i) {
tp=dfs(s+a[i],i);
nb+=tp.b,nk+=tp.k;
}
pi=s?p:0.0; x*=(1.0-pi);
nb=(1.0+x*nb)/(1.0-x*nk);
nk=pi/(1.0-x*nk);
return (data){nk,nb};
}
int main()
{
while(scanf("%lf%d%d",&p,&t,&n)!=EOF) {
for(int i=1;i<=n;++i) scanf("%d",a+i);
sort(a+1,a+n+1);
printf("%.3lf\n",dfs(0,n).b);
}
return 0;
}
[JLOI2012]时间流逝的更多相关文章
- BZOJ2784: [JLOI2012]时间流逝
BZOJ2784: [JLOI2012]时间流逝 https://lydsy.com/JudgeOnline/problem.php?id=2784 分析: 挺有意思的一道题. 注意到状态数是\(P( ...
- bzoj 2784 [JLOI2012]时间流逝——树上高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2784 一个状态可以加很多个能量圈,但减少能量圈的情况只有一种.所以可以用树来刻画. 然后就变 ...
- Luogu P3251 [JLOI2012]时间流逝 期望dp
题面 题面 题解 期望\(dp\)好题! 今年\(ZJOI\)有讲过这题... 首先因为\(T\)只有\(50\),大力\(dfs\)后发现,可能的状态数最多只有\(20w\)左右,所以我们就可以大力 ...
- [JLOI2012]时间流逝 树上高斯消元 概率期望
题面 题意:(感觉题面写的题意是错的?)有\(n\)种能量不同的圈,设当前拥有的圈的集合为\(S\),则: 1,每天有\(p\)概率失去一个能量最小的圈.特别的,如果\(S = \varnothing ...
- bzoj 2784: [JLOI2012]时间流逝【树形期望dp】
来自lyd课件 发现s和last(s),next(s)成树结构,然后把式子化简成kx+b的形式,做树形dp即可 #include<iostream> #include<cstdio& ...
- Noip前的大抱佛脚----动态规划
目录 动态规划 序列DP 背包问题 状态压缩以及拆分数 期望概率DP 马尔可夫过程 一类生成树计数问题 平方计数 动态规划 序列DP 有些问题: 求长度为\(l\)的上升子序列个数 形如一个值域的前缀 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ2783: [JLOI2012]树 dfs+set
2783: [JLOI2012]树 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 588 Solved: 347 Description 数列 提交文 ...
随机推荐
- IDEA文件对比
- 跨域 XMLHttpRequest对象
XMLHttpRequest对象是ajax编程的基础,用于发送请求(数据)与服务端进行交互. 目前主流浏览器都内置了XMLHttpRequest对象. 浏览器会使用XMLHttpRequest对象来创 ...
- vscode c++ cmake template project
VSCode configure C++ dev environment claim use CMake to build the project. For debugging, VSCode's C ...
- Caused by: java.lang.ClassNotFoundException: Didn't find class "io.grpc.helloworldexample.HelloworldActivity" on path: DexPathList
FAQ: Android app 编译好后安装到手机,运行时闪退,报如下错误: java.lang.RuntimeException: Unable to instantiate activity ...
- postgresql 10 ssl 双向认证
https://blog.csdn.net/dna911/article/details/82819637
- javascript小例子:實現四方向文本无缝滚动效果
实现一个文本无缝滚动的效果: <!DOCTYPE html> <!--[if lt IE 7 ]> <html lang="zh-CN" class= ...
- OAuth2:隐式授权(Implicit Grant)类型的开放授权
适用范围 仅需临时访问的场景 用户会定期在API提供者那里进行登录 OAuth客户端运行在浏览器中(Javascript.Flash等) 浏览器绝对可信,因为该类型可能会将访问令牌泄露给恶意用户或应用 ...
- 12px以下字体显示问题
刚接到广告公司出的设计稿,里面很多内容均是12px以下得字体,现在来总结一下解决办法,方便以后使用 1.使用png图片 但是会影响页面响应速度 2.使用transform: scale(0.x); 注 ...
- IDEA创建SpringBoot项目
创建SpringBoot有三种方式: 方式一:(常用方式)
- 12306登录爬虫 session版本
import requests import re import base64 # 定义session headers = { 'User-Agent':'Mozilla/5.0 (Windows N ...