1. 程式人生 > 其它 >數列求和

數列求和

等比數列求和

\[(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} \]

可得:

\[A=\frac {a}{1-p}+b*\frac {p-p^{n+1}}{(1-p)^2}-\frac{(a+n*b)*p^{n+1}}{{1-p}} \]

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;
}