數列求和
阿新 • • 發佈:2021-12-13
等比數列求和
\[(1): A=a+a*p+a*p^2+...+a*p^n \]\[(2): A*p=a*p+a*p^2+a*p^3+...+a*p^{n+1} \]\[(1)-(2):A*(1-p)=a*(1-p^{n+1}) \]可得:
\[A=a*\frac {1-p^{n+1}}{1-p} \]等差乘等比數列求和
\[(1): A=a+(a+b)*p+(a+2*b)*p^2+...+(a+n*b)*p^n \]\[(2): A*p=a*p+(a+b)*p^2+(a+2*b)*p^3+...+(a+n*b)*p^{n+1} \]\[(1)-(2):A*(1-p)=a+b*(p+p^2+p^3+...+p^n)-(a+n*b)*p^{n+1} \]\[A*(1-p)=a+b*p*(1+p^1+p^2+...+p^{n-1})-(a+n*b)*p^{n+1} \]\[A*(1-p)=a+b*p*\frac {1-p^{n}}{1-p}-(a+n*b)*p^{n+1} \]可得:
CF908D New Year and Arbitrary Arrangement
求:
\[\frac {pb}{pa+pb}*\sum_{a=0}^\infty(i+j+a)*(\frac {pb}{pa+pb})^a \]代入公式:
\[\frac {pb}{pa+pb}* (\sum_{a=0}^\infty(i+j+a)*(\frac {pa}{pa+pb})^a)\]\[=\frac {pb}{pa+pb}*(\frac {i+j}{1-\frac {pa}{pa+pb}}+\frac {\frac {pa}{pa+pb}-\frac {pa}{pa+pb}^{\infty+1}}{(1-\frac {pa}{pa+pb})^2}-\frac{(i+j+n)*\frac {pa}{pa+pb}^{\infty+1}}{{1-\frac {pa}{pa+pb}}}) \]\[=\frac {pb}{pa+pb}*(\frac {i+j}{\frac {pb}{pa+pb}}+\frac {\frac {pa}{pa+pb}-\frac {pa}{pa+pb}^{\infty+1}}{(\frac {pb}{pa+pb})^2}-\frac{(i+j+n)*\frac {pa}{pa+pb}^{\infty+1}}{{\frac {pb}{pa+pb}}}) \]\[=i+j+\frac {\frac {pa}{pa+pb}-\frac {pa}{pa+pb}^{\infty+1}}{\frac {pb}{pa+pb}}-(i+j+n)*\frac {pa}{pa+pb}^{\infty+1} \]\[=i+j+\frac {\frac {pa}{pa+pb}}{\frac {pb}{pa+pb}}=i+j+\frac {pa}{pb} \]#include<bits/stdc++.h> using namespace std; int k,pa,pb; const long long md=1e9+7; long long dp[1005][1005],invab,invb; inline long long pwr(long long x,long long y){ long long res=1; while(y){ if(y&1)res=res*x%md; x=x*x%md;y>>=1; }return res; } long long dfs(int x,int y){ if(x+y>=k)return (x+y+pa*invb%md)%md; if(~dp[x][y])return dp[x][y]; return dp[x][y]=(dfs(x+1,y)*pa%md+dfs(x,x+y)*pb)%md*invab%md; } int main(){ memset(dp,-1,sizeof(dp)); scanf("%d%d%d",&k,&pa,&pb); invab=pwr(pa+pb,md-2);invb=pwr(pb,md-2); printf("%lld",dfs(1,0)); return 0; }