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 ...
随机推荐
- 工具类Util类的注释书写规范
package com.paic.pacz.core.salesmanage.util; import java.util.List; import org.apache.commons.beanut ...
- mybatis使用generator自己主动生成代码时的类型转换
使用mybatis的generator自己主动生成代码,可是oracle数据库中number(6,2)总是自己主动转成BigDecimal.我想要转成的是float类型 这样就写了一个类型转换器,须要 ...
- oracle 11g rac 修改VIP、scan VIP、priv IP
11GR2 RAC modify vip,public ip,private ip,scan vip实施步骤1 修改目的 根据业务的需求,需要由原来的临时IP改为生产ip,以下为调整前后对应的I ...
- Java-MyBatis:MyBatis XML 文件
ylbtech-Java-MyBatis:MyBatis XML 文件 1.返回顶部 1. Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大, ...
- TCP/IP协议族简介
OSI网络分层介绍 网络结构的标准模型是OSI模型,由国际互联网标准化组织定义的网络分层模型.虽然目前没有完全按照这种模型实现的网络协议栈,但是学习这个模型对于我们理解网络协议还是很有帮助的. 1.O ...
- js复制克隆
$(function() {//开始加载updateIndex()}) function add(){ var str = $(".tr_wqxx").first().clone( ...
- javascript动画函数封装(升级版)
//把 任意对象 的 任意数值属性 改变为 任意的目标值 function animate(obj, json, fn) { clearInterval(obj.timer); obj.timer = ...
- Android 实现调用系统拍照相册,剪切功能
1.XML布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...
- 性能优化实战-join与where条件执行顺序
昨天经历了一场非常痛苦的性能调优过程,但是收获也是刻骨铭心的,感觉对sql引擎的原理有了进一步认识. 问题起源于测试人员测一个多条件检索的性能时,发现按某个条件查询会特别慢.对应的sql语句简化为: ...
- 杭电 2639 Bone Collector II【01背包第k优解】
解题思路:对于01背包的状态转移方程式f[v]=max(f[v],f[v-c[i]+w[i]]);其实01背包记录了每一个装法的背包值,但是在01背包中我们通常求的是最优解, 即为取的是f[v],f[ ...