/*
题目大意:注册一款游戏需要排队,一共有四种事件:
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. 事件监听和window.history以及自定义创建事件

    1.事件监听window.addEventListener方法: Window.addEventListener(event, function, useCapture); useCapture:表示 ...

  2. swoole学习(一)----linux安装swoole

    1.下载swoole 登录swoole官网 https://www.swoole.com/ 点击下载,找到github或者其他链接下载下来 放到虚拟机上. 也可以使用虚拟机下载 2.登录虚拟机 推荐使 ...

  3. Python入门必学:数据类型和变量的用法

    什么是数据类型?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据, ...

  4. 区间DP入门题目合集

      区间DP主要思想是先在小区间取得最优解,然后小区间合并时更新大区间的最优解.       基本代码: //mst(dp,0) 初始化DP数组 ;i<=n;i++) { dp[i][i]=初始 ...

  5. Python locale 多语言模块和我遇到的坑

    Table of Contents 1. locale遇到的问题 1.1. locale 简介 1.1.1. 什么是locale 1.1.2. locale 相关命令 1.2. Python loca ...

  6. MySQL权限管理创建帐户

    权限管理 1.创建账号 # 本地账号 create user 'egon1'@'localhost' identified by '123'; # mysql -uegon1 -p123 # 远程帐号 ...

  7. python 表格存取方法(转)

    xlwt/xlrd库 存Excel文件:(如果存储数据中有字符,那么写法还有点小小的变化) import xlwt workbook = xlwt.Workbook(encoding='utf-8') ...

  8. python语法re.compile模块介绍

    1. re模块是正则表达式模块,re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象.可以实现更有效率的匹配. impor ...

  9. Spring mvc+hibernate+freemarker(实战)

    Spring mvc+hibernate+freemarker(实战) 博客分类: Spring Spring mvchibernatefreemarkerwebjava  今天我为大家做了一个 sp ...

  10. iOS远程消息推送原理

    1. 什么是远程消息推送? APNs:Apple Push Notification server 苹果推送通知服务苹果的APNs允许设备和苹果的推送通知服务器保持连接,支持开发者推送消息给用户设备对 ...