鏈接
題意:Bob向Alice買郵票,每種郵票有無限張,Bob每次等概率選擇一種郵票買(可以買買過的),每次代價爲
問期望用多少錢可以集齊所有
#include<bits/stdc++.h>
using namespace std;
const int Maxn=100020,M=1e6+3;
int fac[Maxn],rev1[Maxn],rev2[Maxn];
int dp[Maxn][11];
int powmod(int x,int y)
{
int ret=1;
while(y){if(y&1)ret=1LL*ret*x%M;y>>=1;x=1LL*x*x%M;}
return ret;
}
int main()
{
fac[0]=fac[1]=1;
for(int i=2;i<Maxn;i++)fac[i]=1LL*fac[i-1]*i%M;
rev1[0]=rev1[1]=1;
rev2[0]=rev2[1]=1;
for(int i=2;i<Maxn;i++)rev1[i]=1LL*(M-M/i)*rev1[M%i]%M;
for(int i=2;i<Maxn;i++)rev2[i]=1LL*rev2[i-1]*rev1[i]%M;
for(int k=0;k<10;k++)
{
for(int n=1;n<Maxn;n++)
{
if(!k)dp[n][k]=(dp[n-1][k]+rev1[n])%M;
else dp[n][k]=(dp[n-1][k]+1LL*rev1[n]*dp[n][k-1]%M)%M;
}
}
int n,k;
while(scanf("%d%d",&n,&k)!=EOF&&(n||k))
{
printf("%lld\n",1LL*dp[n][k]*powmod(fac[n],10)%M*powmod(n,k+1)%M);
}
}