[hdu4089] Activation【概率dp 数学期望】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4089
本来可以一遍过的,结果mle了一发。。。注意要用滚动数组。
令f(i, j)表示队列剩余i个人,这个人排第j时遇到那种情况的概率,则有
f(i, j) = p1 * f(i, j) + p2 * f(i, (j - 2) % i + 1) + p3 * f(i - 1, j - 1) + p4 * (j <= k).
注意最后哪里有一个强制转换,若j <= k则p4 * 1,若j > k则p4 * 0.把方程移项,得
f(i, j) = ( p2 * f(i, (j - 2) % i + 1) + p3 * f(i - 1, j - 1) + p4 * (j <= k) ) / (1 - p1).
这里最大的问题就是f(i, (j - 2) % i + 1),因为这个值在这之前不是已知的,不好转移。此时,把这个方程抽象出来,就变成了一个简单的一次方程,形如:
x[n] = p * x[n - 1] + a[n]
x[n - 1] = p * x[n - 2] + a[n - 1]
...
x[1] = p * x[n] + a[1].
这个一次方程自己在纸上写一写就知道如何解了,同理,可以通过这种方式求出所有的f值了。
#include <cstdio>
#include <cstring>
#include <cmath> const int maxn = 2010;
const double eps = 1e-8; int n, m, k;
double p1, p2, p3, p4, f[2][maxn], p, poww[maxn] = {1.0}, a; int main(void) {
//freopen("in.txt", "r", stdin);
while (scanf("%d%d%d%lf%lf%lf%lf", &n, &m, &k, &p1, &p2, &p3, &p4) != EOF) {
if (fabs(p1 + p2 - 1) < eps) {
puts("0.00000");
continue;
}
p = p2 / (1.0 - p1);
for (int i = 1; i <= n + 2; ++i) {
poww[i] = poww[i - 1] * p;
}
memset(f, 0, sizeof f);
f[1][1] = p4 / (1 - p1 - p2);
for (int i = 2; i <= n; ++i) {
f[i & 1][1] = p4 / (1.0 - p1);
for (int j = 2; j <= i; ++j) {
a = (p3 * f[i & 1 ^ 1][j - 1] + p4 * (double)(j <= k)) / (1.0 - p1);
f[i & 1][1] += a * poww[i + 1 - j];
}
f[i & 1][1] /= (1.0 - poww[i]); for (int j = 2; j <= i; ++j) {
f[i & 1][j] = (p2 * f[i & 1][j - 1] + p3 * f[i & 1 ^ 1][j - 1] + p4 * (double)(j <= k)) / (1.0 - p1);
}
}
printf("%.5f\n", f[n & 1][m]);
}
return 0;
}
[hdu4089] Activation【概率dp 数学期望】的更多相关文章
- [HDU4089]Activation(概率DP)
HDU4089 题意:有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有一下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排 ...
- bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是 ...
- CF 148D D. Bag of mice (概率DP||数学期望)
The dragon and the princess are arguing about what to do on the New Year's Eve. The dragon suggests ...
- [poj2096] Collecting Bugs【概率dp 数学期望】
传送门:http://poj.org/problem?id=2096 题面很长,大意就是说,有n种bug,s种系统,每一个bug只能属于n中bug中的一种,也只能属于s种系统中的一种.一天能找一个bu ...
- [poj3744] Scout YYF I【概率dp 数学期望】
传送门:http://poj.org/problem?id=3744 令f(i)表示到i,安全的概率.则f(i) = f(i - 1) * p + f(i - 2) * (1 - p),若i位置有地雷 ...
- [hdu4035] Maze【概率dp 数学期望】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4035 真的是一道好题,题解比较麻烦,我自己在纸上写了好大一块草稿才搞出来,不用公式编辑器的话就很难看清楚 ...
- HDU3853-LOOPS(概率DP求期望)
LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Total Su ...
- HDU4089/Uva1498 Activation 概率DP(好题)
题意:Tomato要在服务器上激活一个游戏,一开始服务器序列中有N个人,他排在第M位,每次服务器会对序列中第一位的玩家进行激活,有四种结果: 1.有p1的概率会激活失败,这时候序列的状态是不变的.2. ...
- poj 2096 Collecting Bugs (概率dp 天数期望)
题目链接 题意: 一个人受雇于某公司要找出某个软件的bugs和subcomponents,这个软件一共有n个bugs和s个subcomponents,每次他都能同时随机发现1个bug和1个subcom ...
随机推荐
- Office EXCEL 中单元格怎么打斜线
右击单元格,然后设置单元格格式,然后添加需要的边框 注意里面的文字有讲究,比如我要右上角显示Value,左下角显示Payload,则需要先输一堆空格,然后输入Value,把Value挤到右边去 ...
- Linux 命令 sudo
sudo 这个命令. 是为了 让 普通用户 ,也能够以root的身份来运行 操作, 而这些普通用户 又不须要知道root的password. 在 sudo 运行命令的时候. 仅仅须要 输入自己的pas ...
- react 项目中 引入 bootstrap
react-bootstrap是一个非常受欢迎的针对react封装过的bootstrap,它本身不包含css,所以也是需要使用bootstrap原生库. 在create-react-app建的项目目录 ...
- linux core文件设置
http://blog.csdn.net/ctthuangcheng/article/details/8963551 linux core文件设置 分类: Linux OS Debugging Te ...
- linux系列之-—01 shell编程笔记
一.特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的 ...
- 使用RNN解决句子对匹配问题的常见网络结构
/* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 除了序列标注问题外,句子对匹配(Sentence Pair Matching)问题也是NLP中非经常见 ...
- android 不同进程间的调用 AIDL 实现通讯服务
android 不同进程间的调用 AIDL 实现通讯服务 近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试: 过程例如以下: 1:首先在要被调用的程序里写好 ...
- Web—CSS概述
一.概念: 它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言 的一个子集)等文件样式的计算机语言. 二.特点: 1.实现网页内容与样式的分离 2.降低图形文件的 ...
- 使用jdbc对mysql进行增删改查
建立数据库和数据表 CREATE DATABASE `mysqlTest` DEFAULT CHARACTER SET utf8; CREATE TABLE `test` ( `id` ) NOT N ...
- <label>标签for属性
label 元素不会向用户呈现任何特殊效果.不过,它为鼠标用户改进了可用性.如果您在 label 元素内点击文本,就会触发此控件.就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控 ...