题目链接:New Year and Arbitrary Arrangement 题意: 有一个ab字符串,初始为空. 用Pa/(Pa+Pb)的概率在末尾添加字母a,有 Pb/(Pa+Pb)的概率在末尾添加字母b,当出现≥k个ab子串时立即停止添加字母,求最后期望的ab子串个数.(子串ab不要求连续) 例子:当k=1,aab含2个ab,bbabbab时不可能出现的,因为到了bbab就会停止添加字母. 题解: 期望DP DP果然是智商的分界线 orz @.@#,这题题意其实我也没看太懂,后来看了别人…
Discription You are given three integers k, pa and pb. You will construct a sequence with the following algorithm: Initially, start with the empty sequence. Each second, you do the following. With probability pa / (pa + pb), add 'a' to the end of the…
[题目]Good Bye 2017 D. New Year and Arbitrary Arrangement [题意]给定正整数k,pa,pb,初始有空字符串,每次有pa/(pa+pb)的可能在字符串末尾+a,有pb/(pa+pb)的可能在字符串末尾+b,求加到组成至少k对子序列“ab"时的期望子序列“ab”数.k<=1000,pa,pb<=10^6. [算法]期望DP [题解]主要问题在于字符串无限延伸,那么需要考虑记录前缀的关键量来为DP设置终止状态. 设f[i][j]表示前缀…
题目: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[…
设状态f[i][j]表示有i个a,j个ab的期望 发现如果i+j>=k的话就再来一个b就行了. #include <iostream> #include <cstdio> #include <cstring> using namespace std; +; ][]; int ksm(int d,int z) { ; while(z) { ) res=(1ll*res*d)%mod; d=(1ll*d*d)%mod; z>>=; } return res…
New Year and Arbitrary Arrangement time limit per test2 seconds You are given three integers k, pa and pb. You will construct a sequence with the following algorithm: Initially, start with the empty sequence. Each second, you do the following. With p…
题目链接  Goodbye 2017 Problem D 题意  一个字符串开始,每次有$\frac{pa}{pa+pb}$的概率在后面加一个a,$\frac{pb}{pa+pb}$的概率在后面加一个$b$. 求当整个串中有至少$k$个$ab$的时候(不需要连续,下同),字符串中$ab$个数的期望. 设$f[i][j]$为字符串有$i$个$a$,$j$个$ab$的时候字符串中$ab$个数的期望 设$p = \frac{pa}{pa+pb}$, $q = \frac{pb}{pa+pb}$ 那么对…
题目:http://codeforces.com/contest/908/problem/D 注意是子序列.加一个a对ab个数无影响:加一个b使ab个数多出它前面的a那么多个.所以状态里记录有多少个a和ab. 当 i+j>=k 的时候,再加一个b就结束了.用式子算一下期望,发现一个等比数列:用等比数列的公式算一下,变成一个值减去一个无限小的值,所以就是那个值了. #include<iostream> #include<cstdio> #include<cstring&g…
看了别人的题解 首先这题是一个dp dp[i][j] i是当前有多少个a j是当前有多少个ab子序列 dp[i][j] = dp[i+1][j]*Pa + dp[i][i+j]*Pb; i,j 时加一个a之后会变成i+1, j i,j 时加一个b之后会变成i, i+j 除此之外的话对于i+j >= k的情况 其实是一个几何分布来概括,此时 dp[i][j] = i+j + 1/p - 1 #include<iostream> #include<map> #include<…
题目大意: 给定三个数\(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'个数…