题目:http://codeforces.com/contest/908/problem/D

首先,设 f[i][j] 表示有 i 个 a,j 个 ab 组合的期望,A = pa / (pa + pb) , B = pb / (pa + pb)

那么 f[i][j] = A * f[i+1][j] + B * f[i][i+j]

当 i+j >= k 时,再出现一个 b 就会结束,所以此时:

f[i][j] = f[i][i+j] * B + f[i+1][i+j+1] * A * B + f[i+2][i+j+2] * A2 * B + ... + f[i+∞][i+j+∞] * A * B

化简一番(等比数列求和,1 - A = B)得到 f[i][j] = i + j + A / B

于是就可以做了;

不会刷表就记忆化搜索...

注意取的答案是 dp(1,0) 而非 dp(0,0),因为 dp(0,0) 会一直调用自己,而 dp(1,0) 可以看做是从第一个 a 出现开始算,反正前面没有 a ,对答案无影响。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const maxn=,mod=1e9+;
int k,a,b,c,f[maxn*][*maxn];
bool vis[maxn][maxn];
int pw(int a,int b)
{
int ret=;
for(;b;b>>=,a=((ll)a*a)%mod)
if(b&)ret=((ll)ret*a)%mod;
return ret;
}
int dp(int i,int j)
{
if(vis[i][j])return f[i][j];
vis[i][j]=;
if(i+j>=k)return f[i][j]=(i+j+c)%mod;
f[i][j]=((ll)a*dp(i+,j)+(ll)b*dp(i,i+j))%mod;
return f[i][j];
}
int main()
{
int pa,pb;
scanf("%d%d%d",&k,&pa,&pb);
int tmp=pw(pa+pb,mod-);
a=(ll)pa*tmp%mod; b=(ll)pb*tmp%mod;
c=(ll)a*pw(b,mod-)%mod;
// for(int i=0;i<=2*k;i++)
// for(int j=max(k-i,0);j<=2*k;j++)
// f[i][j]=f[j][i]=(i+j+c)%mod;
// for(int i=k;i>=0;i--)
// for(int j=k;j>=0;j--)
// f[i][j]=(a*f[i+1][j]+b*f[i][i+j])%mod;
printf("%d\n",dp(,));//0,0 会调用自己
//如果不是从第一个a算起,前面一堆b没用
return ;
}

CF 908 D New Year and Arbitrary Arrangement —— 期望DP的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. Codeforces 908 D New Year and Arbitrary Arrangement

    Discription You are given three integers k, pa and pb. You will construct a sequence with the follow ...

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

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

  8. [CodeForces]908D New Year and Arbitrary Arrangement

    设状态f[i][j]表示有i个a,j个ab的期望 发现如果i+j>=k的话就再来一个b就行了. #include <iostream> #include <cstdio> ...

  9. Codeforces New Year and Arbitrary Arrangement

    New Year and Arbitrary Arrangement time limit per test2 seconds You are given three integers k, pa a ...

随机推荐

  1. Linux命令整理(2018/9/9-2018/9/15)

    根据本周的Linux学习进度,整理了部分Linux知识及常用命令,待完善…… 1.显示默认启动方式(默认启动目标): systemctl get-default 2.设置默认启动方式(默认启动目标): ...

  2. (九)python3 列表生成式

    列表生成式即 List Comprehensions,是 Python 内置的非常简单却强大的可以用来创建 list 的生成式. 要生成 list [1, 2, 3, 4, 5, 6, 7, 8, 9 ...

  3. 用pandas展示数据输出时列名不能对齐

    列名用了中文的缘故,设置pandas的参数即可,代码如下: import pandas as pd #这两个参数的默认设置都是False pd.set_option('display.unicode. ...

  4. 初入lambda表达式 (主要是c++11)

    写一篇不猫的博文吧 定义 lambda表达式的定义如下 [capture](parameters) mutable ->return-type{statement} 翻译成人话就是 1.[cap ...

  5. allegro学习--区域约束

    前言: 在有些情况需要我们在走线时在某些区域的时候,线是细的,例如BGA封装的FPGA在引出线的时候,我们希望在FPGA内部的线细,出了FPGA后,线变粗.如图: 这就用到了区域的规则约束. 实现: ...

  6. c++中的string常用函数用法总结!

    标准c++中string类函数介绍 注意不是CString 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作 ...

  7. 动态规划之最长公共子序列(LCS)

             在字符串S中按照其先后顺序依次取出若干个字符,并讲它们排列成一个新的字符串,这个字符串就被称为原字符串的子串          有两个字符串S1和S2,求一个最长公共子串,即求字符串 ...

  8. <<编程之美>> -- 队列中取最大值操作的问题

    不得不说编程之美是一本好书,虽然很多题目在做acm中的过程中遇到过,不过还是有很多值得思考的地方 这是今天在编程之美上看到的一个问题,对于栈转化成队列的一个思考 平时都太过依赖c++内函数库中的栈和队 ...

  9. POJ 1988相对偏移

    //不容易啊,终于自己a了一道这种类型的题 // #include<stdio.h> #include<iostream> using namespace std; const ...

  10. [Nescafé 20] 玉蟾宫

    ★   输入文件:jademoon.in   输出文件:jademoon.out   简单对比 时间限制:1 s   内存限制:128 MB [背景] 有一天,小猫rainbow和freda来到了湘西 ...