HDU 4089 && UVa 1498 Activation 带环的概率DP
要在HDU上交的话,要用滚动数组优化一下空间。
这道题想了很久,也算是想明白了,就好好写一下吧。
P1:激活游戏失败,再次尝试。
P2:连接失服务器败,从队首排到队尾。
P3:激活游戏成功,队首的人出队。
P4:服务器down掉,所有人都不能激活了。
设d(i, j)表示i个人排队,主人公排在第j位,发生所求事件的概率。
d(i, 1) = P1 d(i, 1) + P2 d(i, i) + P4 //分别对应激活失败,重新尝试;连接失败排到队尾;服务器down掉
特殊地可以直接计算出 d(1, 1) = (P1 + P2) d(1, 1) + P4
得到:
① j ≤ k,
② j > k,
令
整理上面两个式子得到:
因为是在递推,所以在计算d(i, j)的时候,d(i-1, j-1)的值已经计算出来了。
从d(i, i)开始一直迭代到d(i, 1) (共迭代i-1次),可以计算出一个d(i, i)和d(i, 1)的关系式,不妨设计算出来的为:d(i, i) = a × d(i, 1) + b
然后再把d(i, i)与d(i, 1)的关系代入:
事实上这里系数a可以直接计算出为:
这样就能计算出d(i, 1)和d(i, i),其他的就可以按照最开始的式子递推了。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std; const int maxn = + ;
int n, m, k;
double p1, p2, p3, p4;
double d[][maxn]; const double eps = 1e-; int dcmp(double x)
{
if(fabs(x) < eps) return ;
return x < ? - : ;
} int main()
{
while(scanf("%d%d%d", &n, &m, &k) == && n)
{
scanf("%lf%lf%lf%lf", &p1, &p2, &p3, &p4); if(dcmp(p3 - ) == || dcmp(p4) == ) { puts("0.00000"); continue; } memset(d, , sizeof(d));
d[][] = p4 / (1.0 - p1 - p2);
double p21 = p2 / (1.0 - p1);
double p31 = p3 / (1.0 - p1);
double p41 = p4 / (1.0 - p1); int cur = ; for(int i = ; i <= n; i++)
{
cur = - cur; double a = 1.0, b = ;
for(int j = ; j <= i; j++)
{
a *= p21;
b = b * p21 + d[-cur][j-] * p31;
if(j <= k) b += p41;
} d[cur][i] = (a * p41 + b) / (1.0 - a * p21);
d[cur][] = p21 * d[cur][i] + p41; for(int j = ; j < i; j++)
{
d[cur][j] = p21 * d[cur][j-] + p31 * d[-cur][j-];
if(j <= k) d[cur][j] += p41;
}
} printf("%.5f\n", d[cur][m]);
} return ;
}
代码君
HDU 4089 && UVa 1498 Activation 带环的概率DP的更多相关文章
- ZOJ 3329 One Person Game 带环的概率DP
每次都和e[0]有关系 通过方程消去环 dp[i] = sigma(dp[i+k]*p)+dp[0]*p+1 dp[i] = a[i]*dp[0]+b[i] dp[i] = sigma(p*(a[i+ ...
- hdu 4035 2011成都赛区网络赛E 概率dp ****
太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...
- hdu 4050 2011北京赛区网络赛K 概率dp ***
题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...
- zoj 3329 One Person Game (有环 的 概率dp)
题目链接 这个题看的别人的思路,自己根本想不出来这种设方程的思路. 题意: 有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和. 当 ...
- HDU 4443 带环树形dp
思路:如果只有一棵树这个问题很好解决,dp一次,然后再dfs一次往下压求答案就好啦,带环的话,考虑到环上的点不是 很多,可以暴力处理出环上的信息,然后最后一次dfs往下压求答案就好啦.细节比较多. # ...
- HDU 4089 Activation(概率DP)(转)
11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况. 像概率dp,公式推出来就很容易写 ...
- lintcode:带环链表
带环链表 给定一个链表,判断它是否有环. 解题 定义两个指针p1 p2 p1每次向前走一步 p2每次向前走两步 当p2能赶上p1的时候说明有环 /** * Definition for ListNod ...
- [PHP] 算法-请找出带环链表的环的入口结点的PHP实现
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后 ...
- [LintCode] Linked List Cycle(带环链表)
描述 给定一个链表,判断它是否有环. 样例 给出 -21->10->4->5, tail connects to node index 1,返回 true. 这里解释下,题目的意思, ...
随机推荐
- js操作表格
js 操作table: insertRow(),deleteRow(),insertCell(),deleteCell()方法 表格有几行: var trCnt = table.rows.length ...
- gdb手册
摘自:https://github.com/hellogcc/100-gdb-tips/blob/master/src/quit-gdb-silently.md. 我只是摘抄我平时没注意到的,或者我认 ...
- Ubuntu 18.10 使用VMware克隆后,克隆后的机器再手动更改interfaces配置文件后无法启动网络的解决办法
克隆过程就略过了 配置interfaces root@client02:~# vim /etc/network/interfaces # interfaces() ) and ifdown() aut ...
- 一、使用MyBatis
定义sql映射xml文件 userMapper.xml文件的内容如下: <!--头文件--> <!DOCTYPE mapper PUBLIC "-//mybatis.org ...
- 分布式系统ID生成办法
前言 一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以这种情况下我们并没有对此给 ...
- 【algorithm】二叉树的遍历
二叉树的遍历 二叉树用例 代码解析: public class BinaryTree { static class TreeNode { Integer val; TreeNode left; Tre ...
- Android用Intent来启动Service报“java.lang.IllegalArgumentException: Service Intent must be explicit”错误的解决方法
今天没事来写个播放器,照搬书上的原句,其中一句 //用于启动和停止service的Intent final Intent it = new Intent("android.mu.action ...
- Fragment 创建及替换
1.Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应 ...
- php关于精准计算的模块 BCMath
Php: BCMath bc是Binary Calculator的缩写.bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_ope ...
- LR中常见请求的使用示例
Action(){ //application/x-www-form-urlencoded //application/json //web_add_auto_header("Content ...