CF908D Arbitrary Arrangement
题目大意:
给定三个数\(k\) , \(p_a\) , \(p_b\)
每次有\(\frac{p_a}{p_a+p_b}\)的概率往后面添加一个'a'
每次有\(\frac{p_b}{p_a+p_b}\)的概率往后面添加一个'b'
当出现了\(k\)个形如 \(ab\) 的子序列(不用连续)时停止
求最后期望得到的ab子序列个数。答案对\(10^9+7\)取模。
思路与解法:
\(f[i][j]\) 表示前缀中有 \(i\) 个'a',有 \(j\) 个'ab'子串的串 的期望最终'ab'个数。
转移太容易了:
( 1 ) \(i+1\)是'a': \(\ \ \)\(f[i][j] = f[i][j] + \frac{p_a}{p_a+p_b}*f[i+1][j]\)
( 2 ) \(i+1\)是'b':\(\ \ \) \(f[i][j] = f[i][j] + \frac{p_b}{p_a+p_b}*f[i][i+j\ ]\)
显然形如\(bbbbb...bbbabbabab\)这样的串,在第一个'a'之前的部分都是没有意义的。
所以我们的目标状态为\(f[1][0]\),代表所有串。
但显然这样是没法转移的,因为\(a\)也可能会无限制的增长。
考虑把这种情况单独算:
若\(k \leq i+j\),设\(S = f[i][j]\) , \(p_a = \frac{p_a}{p_a+p_b}\) , \(p_b = \frac{p_b}{p_a+p_b}\)。
推一波式子:
\[S = (i+j)p_b + p_a(i+j+1)p_b + p_a^2(i+j+2)p_b+....\]
\[p_aS = p_a(i+j)p_b + p_a^2(i+j+1)p_b + p_a^3(i+j+2)p_b+....\]
\[(1-p_a)S = (i+j)p_b + p_b(p_a+p_a^2+p_a^3+....)\]
\[(1-p_a)S = (i+j)p_b + p_b\frac{p_a(1-p_a^∞)}{1-p_a}\]
上面那个是等比数列求和公式,其中又有:\(p_a + p_b = 1\) ,\(\ \) \((1-p_a^∞)\ = 1\) , 所以
\[p_bS = (i+j)p_b + p_b\frac{p_a}{p_b}\]
\[f[i][j] = S = (i + j) + \frac{p_a}{p_b}\]
所以转移时,如果\(k \leq i+j\),用公式算,否则\(DP\)转移,最终答案存在\(f[1][0]\)中。
实现代码:
#include<bits/stdc++.h>
#define RG register
#define ll long long
#define _ 2005
#define mod 1000000007
using namespace std;
ll f[ _ ][ _ ] , k , pa , pb , invb , inv;
inline ll Pow(RG ll T,RG ll js,RG ll S){
while(js){if(js&1)S=S*T%mod; T=T*T%mod; js>>=1;}return S;}
int main(){
cin >> k >> pa >> pb;
invb = Pow( pb , mod-2 , 1 );
inv = Pow( (pa+pb)%mod , mod-2 , 1 );
for(RG int i = k; i >= 0; i --)
for(RG int j = k; j >= 0; j --){
if(!i && !j)continue;
if(i + j >= k)
f[ i ][ j ] = ( (i + j) + pa*invb%mod )%mod;
else {
f[ i ][ j ] += f[ i+1 ][ j ] * pa %mod * inv % mod;
f[ i ][ j ] += f[ i ][ i+j ] * pb %mod * inv %mod;
f[ i ][ j ] %= mod;
}
}
cout << f[1][0] ; return 0;
}
CF908D Arbitrary Arrangement的更多相关文章
- Codeforces 908 D.New Year and Arbitrary Arrangement (概率&期望DP)
题目链接:New Year and Arbitrary Arrangement 题意: 有一个ab字符串,初始为空. 用Pa/(Pa+Pb)的概率在末尾添加字母a,有 Pb/(Pa+Pb)的概率在末尾 ...
- 【CodeForces】908 D. New Year and Arbitrary Arrangement
[题目]Good Bye 2017 D. New Year and Arbitrary Arrangement [题意]给定正整数k,pa,pb,初始有空字符串,每次有pa/(pa+pb)的可能在字符 ...
- [CodeForces]908D New Year and Arbitrary Arrangement
设状态f[i][j]表示有i个a,j个ab的期望 发现如果i+j>=k的话就再来一个b就行了. #include <iostream> #include <cstdio> ...
- Codeforces New Year and Arbitrary Arrangement
New Year and Arbitrary Arrangement time limit per test2 seconds You are given three integers k, pa a ...
- [CF908D]New Year and Arbitrary Arrangement
题面在这里 题意 给定三个数\(k,pa,pb\),每次有\(\frac{pa}{pa+pb}\)的概率往后面添加一个'\(a\)',每次有\(\frac{pb}{pa+pb}\)的概率往后面添加一个 ...
- CF908D New Year and Arbitrary Arrangement(期望Dp+数学)
题目大意:给你一个空字符串,你有\(\frac{pa}{pa+pb}\)的概率往字符串最后面加个\(a\),\(\frac{pb}{pa+pb}\)的概率往字符串最后面加个\(b\),当子序列\(ab ...
- CF908D New Year and Arbitrary Arrangement 期望、DP
题目传送门 题意:给出正整数$pa,pb,k$,最开始你有一个空串,每一次你有$\frac{pa}{pa + pb}$的概率向串最后放一个$a$,有$\frac{pb}{pa + pb}$的概率向串最 ...
- 【CF908D】New Year and Arbitrary Arrangement
Problem Description 给定三个数 \(k,pa,pb\) ,每次有 \(\frac{pa}{pa+pb}\) 的概率往后面添加一个 a,有 \(\frac{pb}{pa+pb}\) ...
- $CF908D\ New\ Year\ and\ Arbitrary\ Arrangement$ 期望$dp$
正解:期望$dp$ 解题报告: 传送门$QwQ$ 阿关于题目里那个形如$ab$的子序列我说下,,,我我我之前$get$了好久$QAQ$.这里子序列的个数的定义是这样儿的,举个$eg$,$aabb$,就 ...
随机推荐
- 六、BeautifulSoup4------自动登录网站(手动版)
每天一个小实例:(按照教学视频上自动登录的网站,很容易就成功了.自已练习登录别的网站,问题不断) 这个自己分析登录boss直聘.我用了一下午的时间,而且还是手动输入验证码,自动识别输入验证码的还没成功 ...
- 使用supervisor 进行进程管理时调整最大文件打开数
[supervisord]logfile=/tmp/supervisord.log ; 日志文件,默认是 $CWD/supervisord.loglogfile_maxbytes=50MB ; 日志文 ...
- 聊聊Vue.js的template编译
写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:https://github.com/a ...
- 关于DOM与BOM的总结
1.什么是BOM,什么是DOM(基本概念) BOM: Browers Object MOdel 浏览器对象模型 DOM: Document Object MOdel ...
- 应用负载均衡之LVS(三):使用ipvsadm以及详细分析VS/DR模式
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Visual Studio 2017 发布 15.5 版本,百度网盘离线安装包下载。
Visual Studio 2017 15.5 版本已正式发布,同时发布的还有 Visual Studio for Mac 7.3 .此次更新包含主要性能改进,新特性以及 bug 修复.发行说明中文版 ...
- TensorFlow4Delphi
https://github.com/hartmutdavid/TensorFlow4Delphi
- HDU - 1043 A* + 康托 [kuangbin带你飞]专题二
这题我第一次用的bfs + ELFhash,直接TLE,又换成bfs + 康托还是TLE,5000ms都过不了!!我一直调试,还是TLE,我才发觉应该是方法的问题. 今天早上起床怒学了一波A*算法,因 ...
- JSP的内置对象以及作用域。
最近在面试,一些基础的问题总是会被问到,虽然是基础,但是有些东西在工作中用的少,所以就有些记不清了,在面试的时候更因为紧张很容易造成原先知道的知识也会突然忘了的情况发生.所以在重新组织一下jsp的内置 ...
- 重装Win10系统的非常简单的操作教程
这是回到学校的第二天,准备搞一份实习证明,然而宿舍宽带停了,于是我来到了社团办公室,打开了其中一台电脑. 各位师弟师妹...你们也太厉害,把电脑折腾成这样...电脑装了各种各样的工具, Adobe P ...