题意
有一个人在1号点。若一个人当前在第i号点,则其会等概率跳到i,i+1,…,n号点上。问这个人跳到n号点的期望步数。答案取模。
n≤107
n
≤
10
7
分析
普及组dp题,比较丧心病狂的是这题卡空间,只能把逆元数组搞出来,dp数组直接用两个变量滚动就好了。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
typedef long long LL;
const int N=10000005;
const int MOD=1000000007;
int ny[N],n;
int main()
{
scanf("%d",&n);
ny[0]=ny[1]=1;
for (int i=2;i<=n;i++) ny[i]=(LL)(MOD-MOD/i)*ny[MOD%i]%MOD;
int x=0,y;
for (int i=2;i<=n;i++)
{
y=(LL)(ny[i]+(LL)ny[i]*(x+i-1)%MOD)*ny[i-1]%MOD*i%MOD;
(x+=y)%=MOD;
}
printf("%d",y);
return 0;
}