HDU 4089
很容易列出方程
设dp[i][j]为排在第i位置,总共有j个人排队到达目标状态的概率
i=1
dp[i][j]=p4+p1*dp[i][j]+p2*dp[j][j]
2<=i<=k
dp[i][j]=p4+p1*dp[i][j]+p2*dp[i-1][j]+p3*dp[i-1][j-1]
i>k
dp[i][j]=p1*dp[i][j]+p2*dp[i-1][j]+p3*dp[i-1][j-1]
设p2=p2/(1-p1),p3=p3/(1-p1),p4=p4/(1-p4)
上述三个转移方程化简后为
dp[i][j]=p2*dp[i-1][j]+p3*dp[i-1][j-1] i>k
dp[i][j]=p4+p2*dp[i-1][j]+p3*dp[i-1][j-1] 2<=i<=k
dp[i][j]=p4+p2*dp[j][j] i==1
可以发现同一列的各状态存在一个环的依赖状态,于是,可以先求出dp[j][j]
不妨设dp[i][j]=A[i]*dp[j][j]+B[i]
不停地往上代入,即可得到最终dp[j][j]的表达式了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; double p[2050][2050];
double A[2050],B[2050]; int main(){
int n,m,k,k0,k1;
double p1,p2,p3,p4;
while(scanf("%d%d%d%lf%lf%lf%lf",&n,&m,&k,&p1,&p2,&p3,&p4)!=EOF){
if(p4<1e-5){
printf("0.00000\n");
continue;
}
// cout<<"YES"<<endl;
p[1][1]=p4/(1-p1-p2);
p2=p2/(1-p1); p3=p3/(1-p1); p4=p4/(1-p1);
for(int j=2;j<=n;j++){
for(int i=1;i<=j;i++){
if(i==1){
A[1]=p2; B[1]=p4;
}
else if(i>=2&&i<=k){
A[i]=A[i-1]*p2;
B[i]=p4+p3*p[i-1][j-1]+p2*B[i-1];
}
else{
A[i]=p2*A[i-1];
B[i]=p2*B[i-1]+p3*p[i-1][j-1];
}
}
p[j][j]=B[j]/(1-A[j]);
for(int i=1;i<=j-1;i++){
if(i==1){
p[1][j]=p4+p2*p[j][j];
}
else if(i>=2&&i<=k){
p[i][j]=p4+p2*p[i-1][j]+p3*p[i-1][j-1];
}
else
p[i][j]=p2*p[i-1][j]+p3*p[i-1][j-1];
}
}
printf("%.5lf\n",p[m][n]);
}
return 0;
}
HDU 4089的更多相关文章
- HDU 4089 Activation 概率DP 难度:3
http://acm.hdu.edu.cn/showproblem.php?pid=4089 这道题中一共有两个循环: 1.事件1 如果一直落在Activation failed事件上,那么就会重新继 ...
- HDU 4089 Activation:概率dp + 迭代【手动消元】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4089 题意: 有n个人在排队激活游戏,Tomato排在第m个. 每次队列中的第一个人去激活游戏,有可能 ...
- HDU 4089 Activation(概率DP)(转)
11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况. 像概率dp,公式推出来就很容易写 ...
- HDU 4089 && UVa 1498 Activation 带环的概率DP
要在HDU上交的话,要用滚动数组优化一下空间. 这道题想了很久,也算是想明白了,就好好写一下吧. P1:激活游戏失败,再次尝试. P2:连接失服务器败,从队首排到队尾. P3:激活游戏成功,队首的人出 ...
- [HDU 4089]Activation[概率DP]
题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...
- Activation HDU - 4089(概率dp)
After 4 years' waiting, the game "Chinese Paladin 5" finally comes out. Tomato is a crazy ...
- hdu 4089 概率dp
/* 题目大意:注册一款游戏需要排队,一共有四种事件: 1.注册失败,队列不变,概率为p1 2.注册过程中断开连接,正在注册的人排到队列的末尾,概率为p2 3.注册成功,移出队列,概率为p3 4.服务 ...
- Activation(hdu 4089)
题目:仙5的激活序列.有以下4种情况: 1.注册失败,但是不影响队列顺序 ,概率为p1 2.连接失败,队首的人排到队尾,概率为p2 3.注册成功,队首离开队列,概率为p3 4.服务器崩溃,激活停止,概 ...
- Activation HDU - 4089 (概率DP)
kuangbin的博客 强 #include <bits/stdc++.h> using namespace std; const int MAXN = 2005; const doubl ...
随机推荐
- C# 低耦合 高内聚
低耦合 loosely Coupling 松散的耦合关系=炮友 couple=夫妻 夫妻=法律约束.家庭.生活.财产.繁衍 炮友:吃喝玩乐,不会产生感情方面的依赖 内聚性 内聚性又称块内联 ...
- 洛谷—— P1220 关路灯
https://www.luogu.org/problem/show?pid=1220 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住 ...
- 【基础训练】HDOJ2032杨辉三角
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWEdzaWxlbmNl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- Android Activity组件的启动过程
0.总图 1.总图中的第一步,Laucher主线程向ActivityManagerService进程发出START_ACTIVITY_TRANSACTION 如图:第一步 ~/Android/fram ...
- js 数组克隆
在JS中,对于对象类型的变量的引用是通过类似C之类的"指针"的方式来操作的,及假设多个变量引用同一个对象,则随意一个变量对对象的操作都会影响到其他的变量. 这个可能不是非常明确,以 ...
- LinkedList 方法知识点
package test_day_9; import java.util.Iterator; import java.util.LinkedList; public class LinkedListD ...
- 派生类地址比基类地址少4(CDerived对象的起始地址存放的是虚表指针vptr,也就是子类的第一项内容。接下来的是基类的成员变量,接下来再是自身的成员变量)
大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸.我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree ...
- Word技巧杂记(一)——去掉页眉上方的黑线
今天在调整文章的格式时,突然发现在页眉的上方有一条巨粗无比的黑线,不知从何处冒出来的(如下图) 经过长时间的研究,终于发现原来这是页面的边框.解决办法也很简单: 格式->边框与底纹->页面 ...
- 英语发音规则---G字母
英语发音规则---G字母 一.总结 一句话总结: 1.G发[g]音? bag [bæg] n. 袋:猎获物 go [gəʊ] vi. 走:达到 garden ['gɑːd(ə)n] n. 花园 gla ...
- flask之jinji2模板介绍
1.1.模板传参 (1)主程序 from flask import Flask,render_template app = Flask(__name__) @app.route('/') def ...