loj #6342. 跳一跳 期望dp

令 $f[i]$ 表示已经到达 $i$ 点,为了到大 $n$ 点还期望需要的时间,随便转移一下就行.

由于本题卡空间,要记得开滚动数组.   

#include <bits/stdc++.h>   
#define N 12000010
#define LL long long 
#define setIO(s) freopen(s".in","r",stdin)    
using namespace std; 
const LL mod=1000000007;  
int inv[N]; 
int main() 
{ 
	// setIO("input");   
	int n,i;  
	scanf("%d",&n); 
	LL f=0,s=0;  
	inv[1]=1; 
	for(i=2;i<=n;++i)   inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;   
	for(i=n-1;i>=1;--i)                    
	{
		f=((s+1ll*n-1ll*i+1ll)*inv[n-i]%mod)%mod, s=(s+f)%mod; 
	} 
	printf("%lld\n",f); 
	return 0; 
}

  

posted @ 2019-11-04 16:59  EM-LGH  阅读(162)  评论(0编辑  收藏  举报