显然是概率DP

我们用dp[i][j]表示队伍中有i个人,lyk的小迷妹现在排在j这个位置时的概率大小

不难列出下列转移方程:

(显然已经排到前面k个位置的时候是要加上爆炸也就是p4的概率的)


$$f[i][1]=f[i][1]*p1+f[i][i]*p2+p4$$
$$f[i][j]=f[i][j]*p1+f[i][j-1]*p2+f[i-1][j-1]*p3+p4(j∈[2,k])$$
$$f[i][j]=f[i][j]*p1+f[i][j-1]*p2+f[i-1][j-1]*p3(j∈[k+1,i])$$


这是一个从前往后递推的过程,但是十分不和谐的是:f[i][1]的递推式中出现了$f[i][i]$,显然我们要想办法把这玩意儿给消掉

先化简,把两边同类项合并了,结果是这样的:


$$f[i][1]=f[i][i]*\frac{p2}{1-p1}+\frac{p4}{1-p1}$$
$$f[i][j]=f[i][j-1]*\frac{p2}{1-p1}+f[i-1][j-1]*\frac{p3}{1-p1}+\frac{p4}{1-p1}(j∈[2,k])$$
$$f[i][j]=f[i][j-1]*\frac{p2}{1-p1}+f[i-1][j-1]*\frac{p3}{1-p1}(j∈[k+1,i])$$


由于从前往后递推,在求f[i][j]是,f[i-1][]的所有值我们已经求出来了,所以可以看做常数,p1,p2,p3,p4显然已知,也是常数

所以我们可以把这玩意为当做方程解,我们只要把f[i][i]看做未知数,在不断的迭代下去即可

大概是这个样子:


不妨令a=$\frac{p2}{1-p1}$,$b=\frac{p3}{1-p1}$,$c=\frac{p4}{1-p1}$

设$C_j=f[i-1][j-1]*c+d$

则有:$$f[i][1]=f[i][i]*a+c$$
$$f[i][2]=f[i][1]*a+C_2$$
(然后把f[i][1]代入②式,依次类推......)


最后我们把式子最后面的常数部分设成sol

显然可以得到$$f[i][i]=a^{i}*f[i][i]+sol$$

也就是说
$$f[i][i]=\frac{sol}{1-a^i}$$

这样填完所有$f[][]$的表之后这道题也就解决了qaq

不过因为空间限制,我们要压掉f[][]第一维(f[i][]的值只与f[i-1][]有关)

代码实现在这里哦~

 #include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-')f=-;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}const int M = ;int n,m,k;
double f[][M],p1,p2,p3,p4,a,b,c,v[M],p[M];
int main(){
while(~scanf("%d%d%d%lf%lf%lf%lf",&n,&m,&k,&p1,&p2,&p3,&p4)){
if(fabs(p4)<=1e-) {puts("0.00000");continue;}//p4为0时显然不可能
a=p2/(-p1),b=p3/(-p1),c=p4/(-p1);
v[]=;for(int i=;i<=n;i++) v[i]=v[i-]*a;//预处理a的i次方
p[]=c;f[][]=p4/(-p1-p2);
for(int i=;i<=n;i++){
double sol=;
for(int j=;j<=k;j++) p[j]=f[i-&][j-]*b+c;
for(int j=k+;j<=i;j++) p[j]=f[i-&][j-]*b;//求每一个方程式的常数项
for(int j=;j<=i;j++) sol+=v[i-j]*p[j];//求最后一个式子f[i][i]=......的常数项
f[i&][i]=sol/(-v[i]);
f[i&][]=f[i&][i]*a+c;//回代消元
for(int j=;j<i;j++) f[i&][j]=f[i&][j-]*a+p[j];//回去填表
}printf("%.5lf\n",f[n&][m]);
}
return ;
}

【期望DP】[UVA1498] Activation的更多相关文章

  1. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  2. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  3. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  4. 【BZOJ-4008】亚瑟王 概率与期望 + DP

    4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 832  Solved: 5 ...

  5. 期望dp BZOJ3450+BZOJ4318

    BZOJ3450 概率期望DP f[i]表示到i的期望得分,g[i]表示到i的期望长度. 分三种情况转移: ① s[i]=‘x’:f[i]=f[i-1],g[i]=0 ② s[i]=‘o’:f[i]= ...

  6. HDU 4405 期望DP

    期望DP算是第一题吧...虽然巨水但把思路理理清楚总是好的.. 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落到a点时直接飞向b点.求走到n ...

  7. POJ 2096 【期望DP】

    题意: 有n种选择,每种选择对应m种状态.每种选择发生的概率相等,每种选择中对应的每种状态发生的概率相等. 求n种选择和m种状态中每种至少发生一次的期望. 期望DP好别扭啊.要用倒推的方法. dp[i ...

  8. ZOJ 3822 Domination 期望dp

    Domination Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...

  9. poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)

    Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...

  10. uva11600 状压期望dp

    一般的期望dp是, dp[i] = dp[j] * p[j] + 1; 即走到下一步需要1的时间,然后加上 下一步走到目标的期望*这一步走到下一步的概率 这一题,我们将联通分块缩为一个点,因为联通块都 ...

随机推荐

  1. NX二次开发-UFUN批量操作图层状态UF_LAYER_set_many_layers_status

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_layer.h> UF_initialize ...

  2. Openstack nova-scheduler 源码分析 — Filters/Weighting

    目录 目录 前言 调度器 FilterScheduler调度器的工作流程 Filters 过滤器 Filters 类型 Weighting 权重 源码实现 关键文件及其意义 阶段一nova-sched ...

  3. 常用的一些 linux 指令

    1. mv linux下重命名文件或文件夹使用mv既可实现. 1.1 重命名 a.将一个名为abc.txt的文件重命名为1234.txt #mv abc.txt .txt b. 将目录A重命名为B ( ...

  4. 20130313 word 公式与文字对齐

    1. 就是这儿 然后是这儿 2.这种错误很可能就是进入了死循环 3.复习了字符串现场编写 1.strstr(const char *string, const char *substring):查找s ...

  5. haproxy Mycat集

    8-1   镜像haproxy docker run -it --privileged --name haproxy  docker.io/centos:latest 8-2wget http://w ...

  6. java锁分析

    import java.util.concurrent.TimeUnit; class Phone//Phone.java ---> Phone.class Class.forName(); { ...

  7. Linux下mysql实现远程连接

    首先明白一点并不是mysql禁止远程连接,而是MYSQL的账号禁止远程连接.可能觉得我有点咬文嚼字了,不过我感觉分清这点还是很重要的.默认情况下,所有账号都是禁止远程连接的.在安装MYSQL的时候,在 ...

  8. file对象的获取 radio值的获取

    jq $("#hiddenFile").get(0).filesjs this.files; 获取radio的值 $('input:radio:checked').val(): $ ...

  9. laravel 优化小记

    laravel 优化 7 Performance Optimization Tips for the Laravel Developer 运行 php artisan optimize php art ...

  10. Linux 添加时间

    添加在指令后面 `date +%Y%m%d%H%M`注意date和+之间一定要有空格 ps: %%    一个文字的 %  %a    当前locale 的星期名缩写(例如: 日,代表星期日)  %A ...