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方程 感觉区域赛的题 一则有一个点难以想到 二则就是编码有 ...
随机推荐
- C++ 基础 引用
1.引用的本质 int b = 10; int &a = b; 等效于: int * const a = &b; 由于 a 是 const声明,所以一旦定义无法修改,所以要在定义时就要 ...
- [回文树][BZOJ2160][国家集训队]拉拉队排练
题面 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮 ...
- 硬件中断--DEBUG系列
问题描述: 在线调试时,全速运行,程序进入硬件中断,查看堆栈窗口,发现是从A函数进去的.但是A函数应该没有问题的: 再次重复,发现是从B函数进去的,但是B函数之前运行起来也没有问题的,而且没有传入参数 ...
- HNU暑假训练第一场C.Ninja Map
一.题目大意 Intersections of Crossing Path City are aligned to a grid. There are N east-west streets whic ...
- zeppelin之连接mysql
上面的一篇文章,对于zeppelin的使用,只是我们对于数据存储在文件中,每一次对于当我们连接数据库的时候都会有问题,今天刚好 把这个问题解决今天我们刚好来介绍如何使用zeppelin来与数据进行连接 ...
- Android 支付宝H5 没有回调
今天测试反馈问题,说,手机上没有安装支付宝的,调用支付宝支付之后,没有回调.不提示成功也不提示失败. 我自己试了半天也都是没有问题 .后来终于可以试出来了. 发现原来是,清单里面注册的Activity ...
- echarts 地图的背景色和各省颜色配置以及地图饼图联动
myChart.on(ecConfig.EVENT.MAP_SELECTED, function (param) { var selected = param.selected; var str = ...
- BitLocker:如何启用网络解锁
TechNet 库Windows ServerWindows Server 2012 R2 和 Windows Server 2012服务器角色和技术安全和保护BitLockerBitLocker 中 ...
- 《Cracking the Coding Interview》——第2章:链表——题目7
2014-03-18 02:57 题目:检查链表是否是回文的,即是否中心对称. 解法:我的做法是将链表从中间对半拆成两条,然后把后半条反转,再与前半条对比.对比完了再将后半条反转了拼回去.这样不涉及额 ...
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告----------------------------------------------------------------------------------------- ...