正解:期望$dp$

解题报告:

传送门$QwQ$

阿关于题目里那个形如$ab$的子序列我说下,,,我我我之前$get$了好久$QAQ$.这里子序列的个数的定义是这样儿的,举个$eg$,$aabb$,就有4个形如$ab$的子序列.

然后考虑$dp$?设$f_{i,j}$表示前缀中有$i$个$a$,$j$个$ab$的停止后的期望长度?然后为了后面表达方便设$A=\frac{p_a}{p_a+p_b},B=\frac{p_b}{p_a+p_b}$.

不难推出转移方程就$f_{i,j}=f_{i+1,j}\cdot A+f_{i,i+j}\cdot B$,就分别是加了个$a$加了个$b$,还是挺显然的嘛$QwQ$.

像这种显然考虑记搜转移?但是发现有个问题,就会出现一直是$a$然后就死循环下去的局面$QAQ$

但是发现,在$i+j\leq K$的情况下,只要有一个$b$就会停止操作,所以期望长度可以写成$B\cdot \sum\limits_{p=0}^\infty [A^p \cdot (i + j + p)]$

考虑变形?

设$S=\sum\limits_{p=0}^\infty [A^p\cdot (i+j+p)]$

套路地错位相减得

$A\cdot S=\sum\limits_{p=0}^\infty [A^{p+1}\cdot (i+j+p)]$

$(1-A)\cdot S=i+j+\sum\limits_{p=1}^\infty A^p$($umm$没$get$的自己手动拆下式子减下就明白了$QwQ$

$B\cdot S=i+j+\frac{p_a}{p_b}$

然后就做完辣?就记搜地转移,然后如果出现$i+j\leq K$的情况就直接算出$i+j+\frac{p_a}{p_b}$就成?

最后还有一个问题$QwQ$.就如果出现一直是$b$的情况?所以这里初始状态的时候强行先给个$a$就成

对了,记得开$ll$昂

$over$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define int long long
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int mod=1e9+,N=+;
int K,a,b,A,B,C,f[N][N]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il int power(ri gd,ri gs){ri ret=;while(gs){if(gs&)ret=1ll*ret*gd%mod;gd=1ll*gd*gd%mod;gs>>=;}return ret;}
int dp(ri i,ri j)
{if(i+j>=K)return i+j+C;if(f[i][j])return f[i][j];return f[i][j]=(1ll*dp(i+,j)*A%mod+1ll*dp(i,i+j)*B%mod)%mod;} signed main()
{
//freopen("908d.in","r",stdin);freopen("908d.out","w",stdout);
K=read();a=read();b=read();A=a*power(a+b,mod-)%mod;B=b*power(a+b,mod-)%mod;C=a*power(b,mod-)%mod;
printf("%lld\n",dp(,));
return ;
}

$CF908D\ New\ Year\ and\ Arbitrary\ Arrangement$ 期望$dp$的更多相关文章

  1. CF908D New Year and Arbitrary Arrangement(期望Dp+数学)

    题目大意:给你一个空字符串,你有\(\frac{pa}{pa+pb}\)的概率往字符串最后面加个\(a\),\(\frac{pb}{pa+pb}\)的概率往字符串最后面加个\(b\),当子序列\(ab ...

  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. Codeforces 908 D.New Year and Arbitrary Arrangement (概率&期望DP)

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

  8. 期望$DP$ 方法总结

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

  9. 【CodeForces】908 D. New Year and Arbitrary Arrangement

    [题目]Good Bye 2017 D. New Year and Arbitrary Arrangement [题意]给定正整数k,pa,pb,初始有空字符串,每次有pa/(pa+pb)的可能在字符 ...

随机推荐

  1. js+canvas五子棋人机大战ai算法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Linux服务部署:nginx服务 nfs服务

    nginx服务 源码安装: yum install gcc-* glibc-* openssl openssl-devel pcre pcre-devel zlib zlib-devel -ylsta ...

  3. mysql数据库之去重

    利用 distinct :对需要处理的字段进行去重 select  distinct 字段名 from 表名 去重以后 利用group by select * from 表名 group by 字段名 ...

  4. Java8 Date与LocalDate互转

    Java8 日期时间API,新增了LocalDate.LocalDateTime.LocalTime等线程安全类,接下来要说的是LocalDate与java.util.Date之间的转换. 1.Loc ...

  5. linux 端口映射设置

    iptables -t nat -A PREROUTING -p tcp --dport 新端口 -j REDIRECT --to-ports 旧端口

  6. 云原生生态周报 Vol. 6 | KubeCon EU 特刊

    5 月 26日,2019 年第一个 KubeCon + CloudNativeCon 在巴塞罗那成功闭幕.本届 KubeCon 共吸引了超过 7700 名与会者,相较去年哥本哈根大会的 4300 余名 ...

  7. java el表达式报空指针异常(nullpointexception)

    最近在使用el表达式的时候,用到了int型变量,因为,很多时候,变量不会被赋初值,后面考虑了下,应该将声明由int 改为integer,改了之后就一直报空指针异常,后面仔细查看,我的getter和se ...

  8. codeforces 609B

    #include<bits/stdc++.h> using namespace std; ]; int main() { memset(num,,sizeof(num)); int n,m ...

  9. css技巧 1200px居中容器中某个div增加横屏背景

    <div class='container' style='width:1200px;margin:0 auto;'> <div style='width:200px;margin: ...

  10. javaObject类

    所有类的公共父类,一旦一个类没有显示地继承一个类则其直接父类一定是Object. 一切数据类型都可用Object接收 class OOXX  extends Object{}等价于class ooXX ...