题目大意:给你一个空字符串,你有\(\frac{pa}{pa+pb}\)的概率往字符串最后面加个\(a\),\(\frac{pb}{pa+pb}\)的概率往字符串最后面加个\(b\),当子序列\(ab\)的个数超过\(k\)时,停止加入。求是期望出现子序列\(ab\)的个数


因为可以无限加字母,所以设\(f[i][j]\)表示这个串有\(i\)个\(a\),\(j\)个\(ab\)为前缀时,期望出现的\(ab\)子序列个数

转移方程为
\[f[i][j]=(f[i+1][j]*pa+f[i][j+i]*pb)/(pa+pb)\]

我们可以发现当\(i+j\geq k\)时,再加个\(b\)就可以结束。然后就是求这个状态对应的期望\(x\)

\(x= \frac{pb}{pa+pb} \sum\limits_{a=0}^{\infty}(i+j+a)*({\frac{pa}{pa+pb}})^a\)

\(=\frac{pb}{pa+pb}*\frac{\sum\limits_{a=0}^{\infty}(i+j+a)*({\frac{pa}{pa+pb}})^a-\sum\limits_{a=1}^{\infty}(i+j+a)*({\frac{pa}{pa+pb}})^a}{(1-\frac{pa}{pa+pb})}\)

\(=\sum\limits_{a=0}^{\infty}(i+j+a)*({\frac{pa}{pa+pb}})^a-\sum\limits_{a=0}^{\infty}(i+j+a)*({\frac{pa}{pa+pb}})^{a+1}\)

\(=i+j+\sum\limits_{a=1}^{\infty}({\frac{pa}{pa+pb}})^a\)

\(=i+j+\frac{pa}{pa+pb}/(1-\frac{pa}{pa+pb})\)

\(=i+j+\frac{pa}{pb}\)

这个过程用了两次错位相减法

然后关于答案是\(f[0][0]\) or \(f[1][0]\)的问题

感性理解的话,前面无限加\(b\)不会对答案产生贡献

理性证明的话把转移方程代进去,然后就是\(f[0][0]=f[1][0]\)了

丢代码:

#include <bits/stdc++.h>
#define N 1010
#define ll long long
#define mod 1000000007ll
using namespace std;
ll invab,invb,f[N][N],pa,pb,k;//有i个a和j个ab的期望ab个数 

ll ksm(ll x,ll y){
    ll ans=1;
    for(;y;y>>=1,(x*=x)%=mod) if(y&1) (ans*=x)%=mod;
    return ans;
}
ll dfs(int x,int y){
    if(x+y>=k) return ((x+y)%mod+pa*invb%mod)%mod;
    if(f[x][y]) return f[x][y];
    else return f[x][y]=(dfs(x+1,y)*pa%mod+dfs(x,y+x)*pb%mod)%mod*invab%mod;
}

int main(){
    cin>>k>>pa>>pb;
    invab=ksm(pa+pb,mod-2);
    invb=ksm(pb,mod-2);
    cout<<dfs(1,0);
}

CF908D New Year and Arbitrary Arrangement(期望Dp+数学)的更多相关文章

  1. $CF908D\ New\ Year\ and\ Arbitrary\ Arrangement$ 期望$dp$

    正解:期望$dp$ 解题报告: 传送门$QwQ$ 阿关于题目里那个形如$ab$的子序列我说下,,,我我我之前$get$了好久$QAQ$.这里子序列的个数的定义是这样儿的,举个$eg$,$aabb$,就 ...

  2. CF908D New Year and Arbitrary Arrangement 期望、DP

    题目传送门 题意:给出正整数$pa,pb,k$,最开始你有一个空串,每一次你有$\frac{pa}{pa + pb}$的概率向串最后放一个$a$,有$\frac{pb}{pa + pb}$的概率向串最 ...

  3. CF 908D New Year and Arbitrary Arrangement——期望dp

    题目:http://codeforces.com/contest/908/problem/D 注意是子序列.加一个a对ab个数无影响:加一个b使ab个数多出它前面的a那么多个.所以状态里记录有多少个a ...

  4. CF 908 D New Year and Arbitrary Arrangement —— 期望DP

    题目:http://codeforces.com/contest/908/problem/D 首先,设 f[i][j] 表示有 i 个 a,j 个 ab 组合的期望,A = pa / (pa + pb ...

  5. CF908D New Year and Arbitrary Arrangement 题解

    \(0.\) 前言 有一天 \(Au\) 爷讲期望都见到了此题,通过写题解来加深理解. \(1.\) 题意 将初始为空的序列的末尾给定概率添加 \(a\) 或 \(b\),当至少有 \(k\) 对 \ ...

  6. [CF908D]New Year and Arbitrary Arrangement

    题面在这里 题意 给定三个数\(k,pa,pb\),每次有\(\frac{pa}{pa+pb}\)的概率往后面添加一个'\(a\)',每次有\(\frac{pb}{pa+pb}\)的概率往后面添加一个 ...

  7. hdu4035 Maze 【期望dp + 数学】

    题目链接 BZOJ4035 题解 神题啊...orz 不过网上题解好难看,数学推导不写\(Latex\)怎么看..[Latex中毒晚期] 我们由题当然能很快写出\(dp\)方程 设\(f[i]\)表示 ...

  8. Codeforces 908 D.New Year and Arbitrary Arrangement (概率&期望DP)

    题目链接:New Year and Arbitrary Arrangement 题意: 有一个ab字符串,初始为空. 用Pa/(Pa+Pb)的概率在末尾添加字母a,有 Pb/(Pa+Pb)的概率在末尾 ...

  9. 期望$DP$ 方法总结

    期望\(DP\) 方法总结 这个题目太大了,变化也层出不穷,这里只是我的一点心得,不定期更新! 1. 递推式问题 对于无穷进行的操作期望步数问题,一般可用递推式解决. 对于一个问题\(ans[x]\) ...

随机推荐

  1. Ansible第一篇:介绍及安装

    Ansible介绍 Ansible是个什么东西呢?官方的title是"Ansible is Simple IT Automation"--简单的自动化IT工具.ansible基于P ...

  2. Android 图片加载框架 Glide4.x

    概述 Glide是一个图片加载框架,使得我们可以轻松的加载和展示图片 Glide4.x新增apply()来进行设置,apply可以调用多次,但是如果两次apply存在冲突的设置,会以最后一次为准 新增 ...

  3. Android 技能图谱学习路线

    这里是在网上找到的一片Android学习路线,希望记录下来供以后学习 1Java 基础 Java Object类方法 HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理 HashMap ...

  4. 使用Ajax轮询模拟简单的站内信箱(消息管理)功能

    前一段时间项目需要写一个类似于站内信箱的消息管理的功能,由于对前端不是很熟悉,刚开始不知道怎么做,后来看了网上的方案,现模拟一个非常简单的消息管理. 我们首先看一下最终效果的样式,就是非常简单的一个样 ...

  5. Unity重置Animator到初始状态和重复播放同一个Animation

    遇到问题 特效同事给的Animation更改了物体的很多属性,如Active,Alpha, Scale,Position等等,物体本身需要重复利用,因此使用对象池技术不直接销毁而是隐藏等需要时再显示, ...

  6. windows下查看端口被占用及处理

    一.通过命令行查找端口被谁占用 1.window+R组合键,调出命令窗口 2.输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口 3.查看被占用端口对应的PID,输入 ...

  7. 5.5Python数据处理篇之Sympy系列(五)---解方程

    目录 目录 前言 (一)求解多元一次方程-solve() 1.说明: 2.源代码: 3.输出: (二)解线性方程组-linsolve() 1.说明: 2.源代码: 3.输出: (三)解非线性方程组-n ...

  8. SpringBoot使用注解实现事务管理

    conttoller controller和普通的controller类一样, 不用改变 @RequestMapping(value = "/path/{id}", method ...

  9. java 非访问修饰符 final 的用法

    final 修饰符,用来修饰类.方法和变量 final修饰的类不能被继承 举例,String类是final类,不可以被继承: final修饰的方法不能被重写 只是不能重写,也就是不能被子类修改,但是可 ...

  10. C#基础知识之字符串比较方法:“==”操作符;RefernceEquals;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。

    一.“==”操作符:String.Equals:ReferenceEquals 方法 1.在编程中实际上我们只需要这两种比较,c#中类型也就这两种 (1)值类型的比较:一般我们就是判断两个值类型实例各 ...