hdu 4089 概率dp
/*
题目大意:注册一款游戏需要排队,一共有四种事件:
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的更多相关文章
- HDU 4599 概率DP
先推出F(n)的公式: 设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态. 则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这 ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- hdu 3853 概率dp
题意:在一个R*C的迷宫里,一个人在最左上角,出口在右下角,在每个格子上,该人有几率向下,向右或者不动,求到出口的期望 现在对概率dp有了更清楚的认识了 设dp[i][j]表示(i,j)到(R,C)需 ...
- HDU 4815 概率dp,背包
Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K ( ...
- hdu 4050(概率dp)
算是挺简单的一道概率dp了,如果做了前面的聪聪于可可的话,这题不需要什么预处理,直接概率dp就行了... #include <stdio.h> #include <stdlib.h& ...
- HDU 4405 (概率DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 题目大意:飞行棋.如果格子不是飞行点,扔骰子前进.否则直接飞到目标点.每个格子是唯一的飞行起点 ...
- hdu 4336 概率dp + 状压
hdu 4336 小吃包装袋里面有随机赠送一些有趣的卡片,如今你想收集齐 N 张卡片.每张卡片在食品包装袋里出现的概率是p[i] ( Σp[i] <= 1 ), 问你收集全部卡片所需购买的食品数 ...
- hdu 4576(概率dp+滚动数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 思路:由于每次从某一位置到达另一位置的概率为0.5,因此我们用dp[i][j]表示第i次操作落在 ...
- hdu 5001 概率DP 图上的DP
http://acm.hdu.edu.cn/showproblem.php?pid=5001 当时一看是图上的就跪了 不敢写,也没退出来DP方程 感觉区域赛的题 一则有一个点难以想到 二则就是编码有 ...
随机推荐
- React路由-基础篇
React-Router-DOM ReactRouter网址, 安装 -npmjs找到react-router-dom -yarn add react-router-dom 基本使用方法 1.创建一个 ...
- 解决SecureCRT远程Linux遇到文件不能直接往CRT里直接拖入的问题
不能拖入到CRT的第一个原因可能是Options-->Global Options-->Terminal中的Mouse下的Copy on select没有勾选.当发现自己勾选了也不能往里面 ...
- Makefile (2) gdb
gdb调试 1.用debug的方式编译 -g 2.打上断点 3.单步调试 step into 进入函数里面 step over 运行整个函数 step return 跳出当前函数 4.继续运行 5.打 ...
- python-9-IO编程
1-文件读写 f = open('d:/file.txt','r') #如果文件不存在会报异常 print(f.read()) #一次性读取所有内容 f.close() 1.2 由于文件操作会用异常, ...
- Eclipse EE 运行 Myeclipse Web 应用
第一步:进入项目所在目录,打开.project文件,找到<natures>...</natures>标签,在中间添加如下子标签内容 <nature>org.ecli ...
- 16,Flask-Migrate
终于到了Flask-Migrate,之前在学习Flask-SQLAlchemy的时候,Flask支持 makemigration / migrate 吗? 答案在这里该诉你,如果你同时拥有两个三方组件 ...
- Android 图片放错位置会拉伸变形
今天做了一个很小的需求,然后需要图片,我给ui要图片.直接给了我三套,还命名 x . xx. 2k 真的一开始都不知道.没有玩过这么正规的.我就用了一张,放到了hdpi下面. 后来同事帮我才知道, 图 ...
- 关于 package.json 和 package-lock.json 文件说明
package.json 在 Node.js 中,模块是一个库或框架,也是一个 Node.js 项目.Node.js 项目遵循模块化的架构,当我们创建了一个 Node.js 项目,意味着创建了一个模块 ...
- 用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
因为父类指针可以指向子类对象,使用 copy 的目的是为了让本对象的属性不受外界影响,使用 copy 无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本. 如果我们使用是 str ...
- Nuget的使用笔记-(使用nuget发布dll到www.nuget.org)
Nuget是神马东东? 来自nuget.org官方的介绍 ----------------------------------------------------------------------- ...