/*
题目大意:注册一款游戏需要排队,一共有四种事件:
1.注册失败,队列不变,概率为p1
2.注册过程中断开连接,正在注册的人排到队列的末尾,概率为p2
3.注册成功,移出队列,概率为p3
4.服务器暂停服务,概率为p4
求一个人他前面有不超过k-1个人的时候暂停服务的概率。
从前往后推,统计答案太麻烦,所以选择从后往前推。
dp(i,j)表示一共i个人,他排在j位置的达到目标状态的概率。
j==1 dp[i][j]=dp[i][j]*p1+dp[i][i]*p2+p4;
1<j<=k dp[i][j]=dp[i][j]*p1+dp[i][j-1]*p2+dp[i-1][j-1]*p3+p4;
j> k dp[i][j]=dp[i][j]*p1+dp[i][j-1]*p2+dp[i-1][j-1]*p3;
{i>=j}
化简:
j==1 dp[i][j]=dp[i][i]*p21+p41;
1<j<=k dp[i][j]=dp[i][j-1]*p21+dp[i-1][j-1]*p31+p41;
j> k dp[i][j]=dp[i][j-1]*p21+dp[i-1][j-1]*p31;
p=1-p1;
p21=p2/p;
p31=p3/p;
p41=p4/p;
dp[1][1]=dp[1][1]*p21+p41,得dp[1][1]=p41/(1-p21); j=1 dp[i][1]=dp[i][i]*p21+p41;
j=2 dp[i][2]=dp[i][1]*p21+dp[i-1][1]*p31+p41;
.................................................................................
j==k dp[i][k]=dp[i][k-1]*p21+dp[i-1][k-1]*p31;
j==k+1 dp[i][j]=dp[i][k]*p21+dp[i-1][k]*p31;
.................................................................................
j==i dp[i][i]=dp[i][i-1]*p21+dp[i-1][i-1]*p31;
可发现后面一部分都是常数项(递推过来已求出的),设后面一部分为c[j]
可以消元求解
ai=(((.....(((ai*p+c1)*p+c2)*p+c5)*p+c6*)............+ci)
ai=ai*p^i+c1*p^(i-1)+c2*p^(i-2)+.......+ci*p^0
可求出ai。
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std; const double eps=1e-;
const int maxn=;
double dp[maxn][maxn];
double c[maxn];
double pp[maxn]={1.0}; int main()
{
int n,m,k,i,j;
double p0,p1,p2,p3,p4,p5,p6,p7;
while(~scanf("%d%d%d",&n,&m,&k))
{
scanf("%lf%lf%lf%lf",&p1,&p2,&p3,&p4);
if(fabs(p4)<eps){puts("0.00000");continue;}
p0=-p1;p5=p2/p0;p6=p3/p0;p7=p4/p0;
for(i=;i<=n;i++) pp[i]=pp[i-]*p5;
dp[][]=p7/(-p5);
c[]=p7;
for(i=;i<=n;i++)
{
for(j=;j<=i;j++)
{
c[j]=dp[i-][j-]*p6;
if(j<=k) c[j]+=p7;
}
double temp=0.0;
for(j=;j<=i;j++) temp+=c[j]*pp[i-j];
dp[i][i]=temp/(-pp[i]);
dp[i][]=p5*dp[i][i]+c[];
for(j=;j<i;j++)
dp[i][j]=p5*dp[i][j-]+c[j];
}
printf("%.5lf\n",dp[n][m]);
}
return ;
}

hdu 4089 概率dp的更多相关文章

  1. HDU 4599 概率DP

    先推出F(n)的公式: 设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态. 则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这 ...

  2. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  3. hdu 3853 概率dp

    题意:在一个R*C的迷宫里,一个人在最左上角,出口在右下角,在每个格子上,该人有几率向下,向右或者不动,求到出口的期望 现在对概率dp有了更清楚的认识了 设dp[i][j]表示(i,j)到(R,C)需 ...

  4. HDU 4815 概率dp,背包

    Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K ( ...

  5. hdu 4050(概率dp)

    算是挺简单的一道概率dp了,如果做了前面的聪聪于可可的话,这题不需要什么预处理,直接概率dp就行了... #include <stdio.h> #include <stdlib.h& ...

  6. HDU 4405 (概率DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 题目大意:飞行棋.如果格子不是飞行点,扔骰子前进.否则直接飞到目标点.每个格子是唯一的飞行起点 ...

  7. hdu 4336 概率dp + 状压

    hdu 4336 小吃包装袋里面有随机赠送一些有趣的卡片,如今你想收集齐 N 张卡片.每张卡片在食品包装袋里出现的概率是p[i] ( Σp[i] <= 1 ), 问你收集全部卡片所需购买的食品数 ...

  8. hdu 4576(概率dp+滚动数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 思路:由于每次从某一位置到达另一位置的概率为0.5,因此我们用dp[i][j]表示第i次操作落在 ...

  9. hdu 5001 概率DP 图上的DP

    http://acm.hdu.edu.cn/showproblem.php?pid=5001 当时一看是图上的就跪了 不敢写,也没退出来DP方程 感觉区域赛的题  一则有一个点难以想到 二则就是编码有 ...

随机推荐

  1. PHP开发搭建环境二:开发工具PhpStorm安装、激活以及配置

    关于php的开发工具很多,目前市面上最好用最强大的莫过于PhpStorm这款开发神器了,但是鉴于很多开发者朋友在网站上下载的PhpStorm开发工具不能用,或者使用起来很不方便,笔者把最好用的下载地址 ...

  2. 笔记--tslib 编译

    tslib 是qt启动时的一个触屏校正检验程序. 它的配置以及编译比较简单. 第一步, 下载tslib源码包: http://download.csdn.net/detail/MKNDG/329156 ...

  3. Alice’s Stamps HDU - 6249 (区间DP)

    点击传送 Alice’s Stamps Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  4. Hadoop环境搭建 (伪分布式搭建)

    一,Hadoop版本下载 建议下载:Hadoop2.5.0 (虽然是老版本,但是在企业级别中运用非常稳定,新版本虽然添加了些小功能但是版本稳定性有带与考核) 1.下载地址: hadoop.apache ...

  5. spark&dataframe

    1.今天,我们来介绍spark以及dataframe的相关的知识点,但是在此之前先说一下对以前的hadoop的一些理解 当我启动hadoop的时候,上面有hdfs的存储结构,由于这个是分布式存储,所以 ...

  6. Android 意图通用类 IntentUrl

    1.整体分析 1.1.源代码如下,可以直接Copy. public class IntentUtil { /** * 打开链接 * 根据设置判断是用那种方式打开 * * @param context ...

  7. issubclasss/type/isinstance/callable/super

    issubclass() : 方法用于判断第一个参数是否是第二个参数的子子孙孙类. 语法:issubclass(sub, super) 检查sub类是否是 super 类的派生类 class A: p ...

  8. Visual Studio Emulator for Android 折腾记

    想用虚拟机调试Android项目,于是想到了MS免费提供的 Visual Studio Emulator for Android,这玩意价格免费量又足,N久之前试用过,速度杠杠的! 安装包很小,不到4 ...

  9. (原)C sharp杂谈记事(一)

    题记)最是那一低头的温柔,像一朵睡莲花不胜凉风的娇羞 1)接收 公司的X部门有个APP小项目,APP后台是C sharp的MVC,提供了一个C sharp的web from做管理员操作的后台操作,此项 ...

  10. shell文本处理工具总结

    shell文本处理工具总结 为了效率,应该熟练的掌握自动化处理相关的知识和技能,能力就表现在做同样的一件事情,可以做的很好的同时,耗时还很短. 再次总结shell文本处理的相关规则,对提高软件调试效率 ...