【CF248E】Piglet's Birthday(动态规划)
【CF248E】Piglet's Birthday(动态规划)
题面
洛谷
CodeForces
翻译:
给定\(n\)个货架,初始时每个上面有\(a[i]\)个蜜罐。
有\(q\)次操作,每次操作形如\(u,v,k\),表示从货架\(u\)上任意选择\(k\)个蜜罐试吃(吃过的也还能吃),吃完后把这\(k\)个蜜罐放到\(v\)货架上去。
每次操作完之后回答所有蜜罐都被试吃过的货架数量的期望。
题解
发现没被吃过的数量对于每个货架而言都是单调不增的。
所以考虑没有被吃过的数量,设\(f[i][j]\)表示第\(i\)个货架有\(j\)个蜜罐没有被试吃的概率。
转移的话枚举当前试吃了几个没被吃过的蜜罐用组合数转移即可。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 100100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
double f[MAX][111],ans;
int n,q,a[MAX],b[MAX];
double C(int n,int m)
{
if(n<m)return 0;
double ret=1;
for(int i=1;i<=m;++i)ret=ret*(1.0*(n-i+1)/i);
return ret;
}
int main()
{
n=read();
for(int i=1;i<=n;++i)a[i]=b[i]=read();
for(int i=1;i<=n;++i)f[i][a[i]]=1;
for(int i=1;i<=n;++i)ans+=f[i][0];
q=read();
for(int i=1;i<=q;++i)
{
int u=read(),v=read(),K=read();ans-=f[u][0];
for(int j=0;j<=a[u];++j)
{
double g=0,tt=C(b[u],K);
for(int k=0;k<=K;++k)g+=f[u][j+k]*C(j+k,k)*C(b[u]-j-k,K-k)/tt;
f[u][j]=g;
}
b[u]-=K;b[v]+=K;ans+=f[u][0];
printf("%.10lf\n",ans);
}
return 0;
}
【CF248E】Piglet's Birthday(动态规划)的更多相关文章
- CF248E Piglet's Birthday
题面 题意翻译 给定$n$个货架,初始时每个上面有$a[i]$个蜜罐. 有$q$次操作,每次操作形如$u,v,k$,表示从货架$u$上任意选择$k$个蜜罐试吃(吃过的也还能吃),吃完后把这$k$个蜜罐 ...
- CF248E Piglet's Birthday(概率dp)
题面 luogu CodeForces 题解 \(orz\) yyb 转移蜜罐其实是吓唬人的...... 转移的蜜罐都是尝试过的,所有只关心当前架子上的蜜罐数 设\(f[i][j]\)表示第i个货架有 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- C#动态规划查找两个字符串最大子串
//动态规划查找两个字符串最大子串 public static string lcs(string word1, string word2) { ...
随机推荐
- JUC——线程同步锁(Condition精准控制)
在进行锁处理的时候还有一个接口:Condition,这个接口可以由用户来自己进行锁的对象创建. Condition的作用是对锁进行更精确的控制. Condition的await()方法相当于Objec ...
- Python之pexpect详解
一.引子 Pexpect程序主要用于人机对话的模拟,就是那种系统提问,人来回答yes/no,或者账号登陆输入用户名和密码等等的情况.因为这种情况特别多而且繁琐,所以很多语言都有各种自己的实现.最初的第 ...
- 关于kafka的一些问题理解
- python中web应用与mysql数据库交互
7使用数据库 具体使用python的DB-API,这一章里介绍如何编写代码与MYSQL数据库技术交互,这里使用一个通用的数据库API,名为DB-API. 7.1基于数据库的web应用 之前我们把日志数 ...
- 三种UIScrollView嵌套实现方案
背景 随着产品功能不断的迭代,总会有需求希望在保证不影响其他区域功能的前提下,在某一区域实现根据选择器切换不同的内容显示. 苹果并不推荐嵌套滚动视图,如果直接添加的话,就会出现下图这种情况,手势的冲突 ...
- Echarts服务端生成图片
Echarts是百度发布的一套优秀的浏览器端图表控件,Echarts是基于html5的cavens绘图实现.而使用server端生成图片无法借用浏览器端渲染.通用的做法有两种: 是用headless浏 ...
- 【CentOS 7】scp示例
1,从远端拷贝到本地 /tmp路径 root@raspberrypi:/download/api_weather# scp root@123.207.xxx.xxx:/xxx/* /tmp 2,从本地 ...
- 6.capacity scheduler
1.先决条件 要使用yarn的capcitiy调度器,必须开启yarn的ACLs,否则队列ACLs设置不生效 开启yarn ACLs: # hadoop: core-site.xml hadoop ...
- $.each()用法
通过它,你可以遍历对象.数组的属性值并进行处理. 使用说明 each函数根据参数的类型实现的效果不完全一致: 1.遍历对象(有附加参数) $.each(Object, function(p1, p2) ...
- C++ 类的定义与实现
摘自这篇博客https://blog.csdn.net/xulingxin/article/details/81335030 一."类" 的介绍 在C++中, 用 &q ...