HDU-4089 Activation (概率DP求概率)

题目大意:一款新游戏注册账号时,有n个用户在排队。每处理一个用户的信息时,可能会出现下面四种情况:

1.处理失败,重新处理,处理信息仍然在队头,发生的概率为p1;

2.处理错误,处理信息到队尾重新排队,发生的概率为p2;

3.处理成功,队头信息处理成功,出队,发生的概率为p3;

4.服务器故障,队伍中所有信息丢失,发生的概率为p4;

小明现在在队伍中的第m个位置,问当他前面的信息条数不超过k-1时服务器故障的概率。

题目分析:这道题的状态转移方程不难写。定义状态dp(i,j)表示在有 i 个人的队伍中,他排在第 j 个位置时到达要求状态的概率。则状态转移方程为:

dp(i,1)=p1*dp(i,1)+p2*dp(i,i)+p4

dp(i,j)=p1*dp(i,j)+p2*(i,j-1)+p3*dp(i-1,j-1)+p4  (2<=j<=k)

dp(i,j)=p1*dp(i,j)+p2*(i,j-1)+p3*dp(i-1,j-1)  (k<j<=i)

整理一下,并另p21=p2/(1-p1),p31=p3/(1-p1),p41=p4/(1-p1),则得到:

dp(i,1)=p21*dp(i,i)+p41

dp(i,j)=p21*dp(i,j-1)+p31*dp(i-1,j-1)+p41  (2<=j<=k)

dp(i,j)=p21*dp(i,j-1)+p31*dp(i-1,j-1)  (k<j<=i)

这样就可以通过递推求解。

为了书写方便,把上面的三个转移方程用两个方程表示出来:

dp(i,1)=p21*dp(i,i)+c(1)

dp(i,j)=p21*dp(i,j-1)+c(j)  (2<=j<=i)

dp(i,i)可以通过迭代得到:

(1-p21^i)dp(i,i)=∑(p21^(i-j))*c(j)  (1<=j<=i)

 

ps:得加特判,否则会WA!!。。。

 

代码如下:

# include<iostream>
# include<cstdio>
# include<cmath>
# include<cstring>
# include<algorithm>
using namespace std;const double eps=1e-5;int n,m,k;
double p1,p2,p3,p4;
double dp[2005][2005];int main()
{while(~scanf("%d%d%d",&n,&m,&k)){scanf("%lf%lf%lf%lf",&p1,&p2,&p3,&p4);if(p4<eps){printf("0.00000\n");continue;}double p21=p2/(1-p1);double p31=p3/(1-p1);double p41=p4/(1-p1);dp[1][1]=p41/(1-p21);for(int i=2;i<=n;++i){dp[i][i]=0;for(int j=1;j<=i;++j){if(j==1) dp[i][i]+=pow(p21,i-j)*p41;else if(j>=2&&j<=k) dp[i][i]+=pow(p21,i-j)*(p31*(dp[i-1][j-1])+p41);else dp[i][i]+=pow(p21,i-j)*p31*dp[i-1][j-1];}dp[i][i]/=(1-pow(p21,i));for(int j=1;j<i;++j){if(j==1) dp[i][j]=p21*dp[i][i]+p41;else if(j>=2&&j<=k) dp[i][j]=p21*dp[i][j-1]+p31*dp[i-1][j-1]+p41;else dp[i][j]=p21*dp[i][j-1]+p31*dp[i-1][j-1];}}printf("%.5lf\n",dp[n][m]);}return 0;
}

  

转载于:https://www.cnblogs.com/20143605--pcx/p/5324032.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux实操篇——实用指令学习笔记(详解)

9.3帮助指令 9.3.1介绍 当我们对某个指令不熟悉时&#xff0c;我们可以使用Linux提供的帮助指令来了解这个指令的使用方法。 9.3.2man 获得帮助信息 基本语法 man[命令或配置文件]&#xff08;功能描述&#xff1a;获得帮助信息&#xff09;应用实例 案例&#xff1a;查看1…

LeetCode 2249. 统计圆内格点数目

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 circles &#xff0c;其中 circles[i] [xi, yi, ri] 表示网格上圆心为 (xi, yi) 且半径为 ri 的第 i 个圆&#xff0c;返回出现在 至少一个 圆内的 格点数目 。 注意&#xff1a; 格点 是指整数坐标对应的点。 圆周上的…

Python实现自动发送邮件(详解)

Python实现自动发送邮件 1.开启SMTP服务 为了实现自动发送邮件的目的&#xff0c;我们需要在邮箱中开启SMTP服务&#xff1a; 这点很关键&#xff0c;别忘了去开启SMTP&#xff0c; 别忘了去开启SMTP&#xff0c;否则邮件是无法发送成功的 。然后你还需要点击下面生成授权…

unity 常用函数

GameObject.FindGameObjectByTag(); anim.SetFloat("speed",Mathf.Abs(h)); Physics2D.lineCast2D(transform.position,groundCheck.position,1<<LayerMask.NameToLay("ground")); AddForce(); 转载于:https://www.cnblogs.com/yufenghou/p/5325092.…

React 组件:计时器例子

文章目录1. 将应用程序分解为组件2. 构建应用静态版本3. 哪些组件是有状态的4. 每个 state 应该在哪个组件里5. 硬编码初始化state6. 添加反向数据流7. 添加服务器通信learn from 《React全家桶&#xff1a;前端开发与实例详解》https://zh-hans.reactjs.org/tutorial/tutorial…

一、快速开始一个 MyBatis项目(详解)

1.0 概述 1.三层架构 界面层&#xff1a; 和用户打交道的&#xff0c; 接收用户的请求参数&#xff0c; 显示处理结果的。&#xff08;jsp &#xff0c;html &#xff0c;servlet&#xff09; 业务逻辑层&#xff1a; 接收了界面层传递的数据&#xff0c;计算逻辑&#xff0c;…

2013 ACM区域赛长沙 K Pocket Cube hdu 4801

题意:给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<7)步内.最多能翻出几面相同的. 直接打表模拟每种翻转情况 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<iostream>5 using namespace std;6 7 int …

React 组件和服务器

文章目录1. 请求服务器数据2. 发送开始停止请求3. 发送创建、删除、更新请求learn from 《React全家桶&#xff1a;前端开发与实例详解》https://zh-hans.reactjs.org/tutorial/tutorial.htmlhttps://zh-hans.reactjs.org/docs/create-a-new-react-app.html#create-react-app服…

二、MyBatis常用对象分析 封装工具类

1.0 MyBatis 对象分析 &#xff08;1&#xff09; Resources 类 Resources 类&#xff0c;顾名思义就是资源&#xff0c;用于读取资源文件。其有很多方法通过加载并解析资源文件&#xff0c;返回不同类型的 IO 流对象。 &#xff08;2&#xff09; SqlSessionFactoryBuilder…

Java的几个同步辅助类

Java为我们提供了一些同步辅助类&#xff0c;利用这些辅助类我们可以在多线程编程中&#xff0c;灵活地把握线程的状态。 CountDownLatch CountDownLatch一个同步辅助类&#xff0c;在完成一组正在其他线程中执行的操作之前&#xff0c;它允许一个或多个线程一直等待。 再Count…

iOS图片拉伸技巧

纵观移动市场&#xff0c;一款移动app&#xff0c;要想长期在移动市场立足&#xff0c;最起码要包含以下几个要素&#xff1a;实用的功能、极强的用户体验、华丽简洁的外观。华丽外观的背后&#xff0c;少不了美工的辛苦设计&#xff0c;但如果开发人员不懂得怎么合理展示这些设…

LeetCode 2341. 数组能形成多少数对

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums 。在一步操作中&#xff0c;你可以执行以下步骤&#xff1a; 从 nums 选出 两个 相等的 整数从 nums 中移除这两个整数&#xff0c;形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返…

三、MyBatis 使用传统 Dao 开发方式

1.0 使用 Dao 的实现类,操作数据库 1.0.1 Dao 开发 &#xff08;0&#xff09;定义接口StudentDao 及创建接口的映射文件StudentDao .xm package com.zep.dao;import com.zep.domain.Student;import java.util.List;public interface StudentDao {List<Student> selec…

Spring MVC控制器用@ResponseBody声明返回json数据报406的问题

本打算今天早点下班&#xff0c;结果下午测试调试程序发现一个问题纠结到晚上才解决&#xff0c;现在写一篇博客来总结下。 是这样的&#xff0c;本人在Spring mvc控制层用到了ResponseBody标注&#xff0c;以便返回的数据为json格式的数据&#xff0c;到前端JS中用。 问题来了…

LeetCode 2347. 最好的扑克手牌

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌&#xff0c;第 i 张牌大小为 ranks[i] &#xff0c;花色为 suits[i] 。 下述是从好到坏你可能持有的 手牌类型 &#xff1a; "Flush"&#xff1a;同花&#xff0c;五…

四、MyBatis 框架 Dao 动态代理

1.1 步骤 &#xff08;1&#xff09; 去掉 之前编写的Dao 接口实现类 &#xff08;2&#xff09; getMapper 获取代理对象 只需调用 SqlSession 的 getMapper()方法&#xff0c;即可获取指定接口的实现类对象。该方法的参数为指定 Dao接口类的 class 值。 不使用工具类&…

C++中的常量折叠

先看例子&#xff1a; #include <iostream> using namespace std; int main() { const int a 10; int * p (int *)(&a); *p 20; cout<<"a "<<a<<", *p "<<*p<<endl; return 0; } 输出&#xff1a;a 10&…

五、深入理解Mybatis中的参数parameterType (传递一个简单参数,传递多个参数:@Param、使用自定义对象、按位置、使用Map)

1.1 parameterType parameterType: 接口中方法参数的类型&#xff0c; 类型的完全限定名或别名。这个属性是可选的&#xff0c;因为 MyBatis可以推断出具体传入语句的参数&#xff0c;默认值为未设置&#xff08;unset&#xff09;。接口中方法的参数从 java 代码传入到mapper…

React: JSX 、虚拟 DOM、组件配置(props、state、PropTypes、createContext、props.children)

文章目录1. 虚拟 DOM2. JSX3. ReactComponent4. props 是参数5. PropTypes6. getDefaultProps() 获取默认 props7. 上下文8. 多个上下文9. state在setState中使用函数&#xff0c;而不是对象10. 无状态组件11. 使用 props.children 与子组件对话learn from 《React全家桶&#…

android客户端在多个界面切换时保持socket的链接的实例

鉴于自己的痛苦&#xff0c;研究一个socket在多个界面切换时保持链接的问题&#xff0c;令我纠结很久&#xff0c;现在我提供客户端的源码给有需要的人参考。 1、ApplicationUtil类&#xff1a; import java.io.DataInputStream; import java.io.DataOutputStream; import java…