博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4089 Activation
阅读量:6289 次
发布时间:2019-06-22

本文共 2106 字,大约阅读时间需要 7 分钟。

概率,$dp$。

设$dp[i][j]$表示有$i$个人在排队,$Tomato$排在第$j$个的情况下,到达目标状态的概率。$dp[n][m]$为答案。

当$j=1$时,$dp[i][1]=p1*dp[i][1]+p2*dp[i][i]+p4$;

当$2<=j<=k$时,$dp[i][j]=p1*dp[i][j]+p2*dp[i][j-1]+p3*dp[i-1][j-1]+p4$;

当$k<j<=i$时,$dp[i][j]=p1*dp[i][j]+p2*dp[i][j-1]+p3*dp[i-1][j-1]$。

将上面三个式子第一项往左移,左右同除以左边系数之后,得到:

当$j=1$时,$dp[i][1]=A*dp[i][i]+C$;

当$2<=j<=k$时,$dp[i][j]=A*dp[i][j-1]+B*dp[i-1][j-1]+C$;

当$k<j<=i$时,$dp[i][j]=A*dp[i][j-1]+B*dp[i-1][j-1]$。

其中$A=p2/(1-p1)$,$B=p3/(1-p1)$,$C=p4/(1-p1)$。

加下来就是要把这个东西算出来。又是一顿骚操作。

再写的简单一点吧:

当$j=1$时,$dp[i][1]=A*dp[i][i]+x[j]$,此时$x[j]=C$;

当$2<=j<=k$时,$dp[i][j]=A*dp[i][j-1]+x[j]$,此时$x[j]=B*dp[i-1][j-1]+C$;

当$k<j<=i$时,$dp[i][j]=A*dp[i][j-1]+x[j]$,此时$x[j]=B*dp[i-1][j-1]$;

$x[j]$可以通过$dp[i-1][....]$直接算出来。

假设现在我们需要计算$dp[4][1]$至$dp[4][4]$,我们分别设$dp[4][1]$至$dp[4][4]$为$a$,$b$,$c$,$d$。

得到四个等式:

$a=A*d+x[1]$ ①

$b=A*a+x[2]$ ②

$c=A*b+x[3]$ ③

$d=A*c+x[4]$ ④

将②代入③,再将新得到的③代入④,再将新得到的④代入①,

得到:$a=A^4*a+A^3*x[2]+A^2*x[3]+A^1*x[4]+A^0*x[1]$ ⑤,就可以求出$a$了,即求出了$dp[4][1]$。

⑤式子的得到是有规律的,自己写一遍就知道了。得到了$dp[4][1]$就可以知道$dp[4][2..4]$了。

#pragma comment(linker, "/STACK:1024000000,1024000000")#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const double pi=acos(-1.0),eps=1e-6;void File(){ freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout);}template
inline void read(T &x){ char c = getchar(); x = 0; while(!isdigit(c)) c = getchar(); while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); }}int n,m,k;double p1,p2,p3,p4,A,B,C;double dp[2][2005],x[2005];double powA[2005];int main(){ while(~scanf("%d%d%d%lf%lf%lf%lf",&n,&m,&k,&p1,&p2,&p3,&p4)) { if(p4
=2&&j<=k) x[j]=B*dp[flag^1][j-1]+C; else x[j]=B*dp[flag^1][j-1]; } double sum=0; for(int j=2;j<=i;j++) sum=sum+x[j]*powA[i+1-j]; sum=sum+x[1]*powA[0]; dp[flag][1]=sum/(1-powA[i]); for(int j=2;j<=i;j++) dp[flag][j]=A*dp[flag][j-1]+x[j]; flag=flag^1; } printf("%.5f\n",dp[flag^1][m]); } return 0;}

 

转载于:https://www.cnblogs.com/zufezzt/p/6307175.html

你可能感兴趣的文章
作业调度框架 Quartz.NET 2.0 beta 发布
查看>>
mysql性能的检查和调优方法
查看>>
项目管理中的导向性
查看>>
Android WebView 学习
查看>>
(转)从给定的文本中,查找其中最长的重复子字符串的问题
查看>>
HDU 2159
查看>>
spring batch中用到的表
查看>>
资源文件夹res/raw和assets的使用
查看>>
UINode扩展
查看>>
LINUX常用命令
查看>>
百度云盘demo
查看>>
概率论与数理统计习题
查看>>
初学structs2,简单配置
查看>>
Laravel5.0学习--01 入门
查看>>
时间戳解读
查看>>
sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hxsyl-journalnode.pid: Permission denied
查看>>
@RequestMapping 用法详解之地址映射
查看>>
254页PPT!这是一份写给NLP研究者的编程指南
查看>>
《Data Warehouse in Action》
查看>>
String 源码浅析(一)
查看>>