//一条队列对于第一个人的情况

//概率p1:队列保持不变

//p2:第一个人到队尾

//p3:第一个人出队

//p4:系统崩溃

//队列中有N个人,Tomato 在第M位置,求系统崩溃。Tomato 前面的人数为小于k个人的情况的概率

//dp[i][j] 表示队列中有i个人,Tomato 在第j个位置时出现目标状态的概率

//能够非常easy得到递推公式

//dp[i][1] = p2/(1-p1)*dp[i][i] + p4/(1-p1);

//dp[i][j] = p2/(1-p1)*dp[i][j-1] + p3/(1 -p1)*dp[i-1][j-1] + p4/(1-p1);

//dp[i][j] = p2/(1-p1)*dp[i][j-1] + p3/(1-p1)*dp[i-1][j-1] ;

//仅仅有三种情况发生在Tomato 身上,成功出队,系统崩溃时大于k系统崩溃时小于等于k

//所以初始条件dp[1][1] = p4/(p3+p4)

//然后每次先通过迭代求出dp[i][i] ,得到答案

//须要注意的是二维数组会超空间,所以要用滚动数组

#include<cstdio>

#include<cstring>

#include<iostream>

#include<cmath>

using namespace std ;

const int maxn = 2010 ;

double dp[2][maxn] ;

int n, m , k ;

int main()

{

   // freopen("in.txt" ,"r" ,stdin) ;

    double p1 , p2 , p3 , p4 ,tmp , temp;

    int i , j ;

    while(~scanf("%d%d%d%lf%lf%lf%lf" , &n ,&m , &k , &p1 , &p2 , &p3 , &p4))

    {

        memset(dp , 0  , sizeof(dp)) ;

        if(p4 == 0)

        {

            puts("0.00000") ;

            continue ;

        }

        dp[1][1] = p4/(p3+p4);

        for( i = 2;i <= n;i++)

        {

            tmp = 0 ;

            temp = 1 ;

            for( j = i;j > 0 ;j--)

            {

                if(j == 1)tmp+= p4/(1-p1)*temp ;

                else if(j > k)tmp+=p3/(1-p1)*dp[(i-1)%2][j-1]*temp ;

                else tmp+=(p3/(1 -p1)*dp[(i-1)%2][j-1] + p4/(1-p1))*temp ;

                temp*=p2/(1-p1);

            }

            dp[i%2][i] = tmp/(1- temp) ;

            for( j = 1;j < i ;j++)

            {

                if(j == 1)dp[i%2][1] = p2/(1-p1)*dp[i%2][i] + p4/(1-p1);

                else if(j <= k)dp[i%2][j] = p2/(1-p1)*dp[i%2][j-1] + p3/(1 -p1)*dp[(i-1)%2][j-1] + p4/(1-p1);

                else dp[i%2][j] = p2/(1-p1)*dp[i%2][j-1] + p3/(1-p1)*dp[(i-1)%2][j-1] ;

            }

        }

        printf("%.5lf\n" , dp[n%2][m]) ;

    }

}

最新文章

  1. GitHub上新建或删除仓库Repository
  2. centos 20T硬盘(超过16T)分区
  3. Gradle实战:发布aar包到maven仓库
  4. 什么是Code Review(转)
  5. MongoDB源码分析——mongod数据查询操作
  6. PHP - 使用pear的HTTP_Upload包进行上传
  7. poptest老李谈分布式与集群 1
  8. Java课程设计——博客作业教学数据分析系统(201521123082 黄华林)
  9. MongDB开启权限认证
  10. 2018-01-02 JavaScript实现ZLOGO: 用语法树实现多层循环
  11. Spring配置中的&quot;classpath:&quot;与&quot;classpath*:&quot;的区别研究(转)
  12. codeforces 366C Dima and Salad 【限制性01背包】
  13. (20)jQuery的文档操作(创建,添加、设置样式和删除等)
  14. Java案例:超市库存管理系统
  15. Linux磁盘空间占满问题快速定位
  16. How to Build a Search Page with Elasticsearch and .NET
  17. Eclipse下内存溢出错误(OutOfMemoryError)
  18. setfacl命令
  19. 05-session-会话跟踪技术
  20. html5 构造网页的新方式

热门文章

  1. iText操作pdf(生成,导入图片等)
  2. Knockout源代码精析-怎样解析demo元素,获取到bindings(二)?
  3. FreeRTOS系列第13篇---FreeRTOS内核控制
  4. [Android] Android开发优化之——对界面UI的优化(1)
  5. WPF获取和设置鼠标位置与progressbar的使用方法
  6. 官方文档 Upgrading Elasticsearch
  7. Windows 10 10586 升级
  8. IP地址的正则表达式写法
  9. inline元素和inline-block元素的4px空白间距解决方案
  10. 【原创】rman备份出现ORA-19625