要在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的更多相关文章

  1. 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+ ...

  2. hdu 4035 2011成都赛区网络赛E 概率dp ****

    太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...

  3. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  4. zoj 3329 One Person Game (有环 的 概率dp)

    题目链接 这个题看的别人的思路,自己根本想不出来这种设方程的思路. 题意: 有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和. 当 ...

  5. HDU 4443 带环树形dp

    思路:如果只有一棵树这个问题很好解决,dp一次,然后再dfs一次往下压求答案就好啦,带环的话,考虑到环上的点不是 很多,可以暴力处理出环上的信息,然后最后一次dfs往下压求答案就好啦.细节比较多. # ...

  6. HDU 4089 Activation(概率DP)(转)

    11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况.   像概率dp,公式推出来就很容易写 ...

  7. lintcode:带环链表

    带环链表 给定一个链表,判断它是否有环. 解题 定义两个指针p1 p2 p1每次向前走一步 p2每次向前走两步 当p2能赶上p1的时候说明有环 /** * Definition for ListNod ...

  8. [PHP] 算法-请找出带环链表的环的入口结点的PHP实现

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后 ...

  9. [LintCode] Linked List Cycle(带环链表)

    描述 给定一个链表,判断它是否有环. 样例 给出 -21->10->4->5, tail connects to node index 1,返回 true. 这里解释下,题目的意思, ...

随机推荐

  1. 转 SecureCRT中文乱码解决方法

    1. 打开对话窗口,在工具栏中点开“选项”,选择“会话选项”.  2. 在打开的“会话选项”中,选择“外观”.  3. 在显示的“窗口和文本外观”中找到“字符编码”.  4. 把“字符编码”设置为“U ...

  2. 用注解@DelcareParents实现引用增强

    引用增强,是一个比较特殊的增强,不同于其他方法级别的增强. 引用增强可以实现:一个Java类,没有实现A接口,在不修改Java类的的情况下,使其具备A接口的功能. 先看看背景,我们有个Love接口: ...

  3. 《Head First HTML与CSS》项目实践中学到的东西

    1.组织的重要性. 首先是要建立两个根文件夹,一个存上线页面的资源,一个存测试页面的资源.所有改动内容都在测试页面的文件夹中进行,在这个文件夹中进行测试.W3C语法检测后(HTML检测网站:https ...

  4. liunx下忘记root密码的解决方法

    1.在Liunx 刚开始重启时.我们这里按“e”键进入系统启动前的Grub配置.(注:一般要安两次e键)(如果你的系统引导程序是LILO,和Grub大体类似,请自行参照LILO给出的提示操作) 如图: ...

  5. uvm_driver——老司机带带我

    文件:src/comps/uvm_driver.svh类: uvm_driver uvm_driver继承(C++中叫继承)自uvm_component,其中定义了两个Ports:seq_item_p ...

  6. Windows上SVN服务器搭建【转】

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说.本文介绍Windows上 VisualSVN server 服务端和 TortoiseSVN客户端搭配使用: 现在S ...

  7. java文件读写链接流向

    1)字节流 读写的链接流向源节点->FileInputStream->BufferedInputStream->ObjectInputStream->程序 程序->Obj ...

  8. [Batch檔案筆記] 在UNC路徑中執行Batch檔

    為了讓其他人可以免安裝又可以執行python程式所以我把python portable版本 winpython 放在samba的空間共享但是使用者如果要開 winpython cammand prom ...

  9. SQL——SQL语言全部关键字详解

    http://blog.csdn.net/quinnnorris/article/details/71056445 数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就 ...

  10. 清北学堂2018DP&图论精讲班 DP部分学习笔记

    Day 1 上午 讲的挺基础的--不过还是有些地方不太明白 例1 给定一个数n,求将n划分成若干个正整数的方案数. 例2 数字三角形 例7 最长不下降子序列 以上太过于基础,不做深入讨论 例3 给定一 ...