基准时间限制:1 秒 空间限制:131072 KB 分值: 640
F(x) = 1 (0 <= x < 4)
F(x) = F(x - 1) + F(x - pi) (4 <= x)
Pi = 3.1415926535.....
现在给出一个N,求F(N)。由于结果巨大,只输出Mod 10^9 + 7的结果即可。
 
Input
输入一个整数N(1 <= N <= 10^6)
Output
输出F(N) Mod 10^9 + 7
Input示例
5
Output示例
3

数学问题 递推 组合数

实数下标的递推,甚至不能记忆化(吧?),递归显然不可取。

可以先考虑一般的情况。

比如Fibonacci数列的递推式是 $ F[n]=F[n-1]+F[n-2] $

众所周知,它的组合数意义可以解释为任选走一级或走两级,从0级上到n级台阶的方案数。(然而蒟蒻博主就不知道)

由此得出F[n]的另一个计算方式是枚举走两级走了i次,然后 $F[n]=\sum_{i=0}^{n/2} C(n-2i+i,i) $

这个算法可以推广到一般的递推式。

那么在本题中,可以类似地枚举走1和走pi的次数,累计从0走到大于n-4的位置的方案数。

由于枚举走1或枚举走pi时,另一个走法的次数上限不同(第一次到达>n-4的位置时,到达的具体位置不同),所以要分类讨论。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
using namespace std;
const double pi=acos(-1.0);
const int mxn=;
const int mod=1e9+;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int ksm(int a,int k){
int res=;
while(k){
if(k&)res=(LL)res*a%mod;
a=(LL)a*a%mod;
k>>=;
}
return res;
}
int fac[mxn],inv[mxn];
void init(int ed){
fac[]=fac[]=;inv[]=inv[]=;
for(int i=;i<=ed;i++)
fac[i]=(LL)fac[i-]*i%mod;
inv[ed]=ksm(fac[ed],mod-);
for(int i=ed-;i;i--)
inv[i]=(LL)inv[i+]*(i+)%mod;
return;
}
inline int C(int n,int m){
if(n<m)return ;
return (LL)fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int n;
int ans=;
int main(){
int i,j;
n=read();
if(n<){
printf("1\n");return ;
}
init(n);
for(i=;i<=n-;i++){//
int tmp=(int)(((double)n--i)/pi);
// printf("i:%d tmp:%d %d\n",i,tmp,C(tmp+i,i));
(ans+=C(tmp+i,i))%=mod;
}
for(i=;i*pi<=n-;i++){//pi
int tmp=(int)(n--i*pi);
// printf("i:%d tmp:%d %d\n",i,tmp,C(tmp+i,i));
(ans+=C(tmp+i,i))%=mod;
}
printf("%d\n",ans);
return ;
}

最新文章

  1. JavaScript基础知识总结(一)
  2. mobiscroll之treelist使用
  3. MYSQL、PHP基础、面向对象基础简单复习总结
  4. 使用Kylin构建企业大数据分析平台的4种部署方式
  5. 2016-10-17: source insight插件
  6. vs2010边调试边编辑后台.cs文件的办法
  7. ASP.NET MVC系列:控制器的Edit方法
  8. 有图有真相——关于“视频专辑:零基础学习C语言 ”
  9. python-ansible
  10. 一个比较全面的DJANGO_REST_FRAMEWORK的CASE
  11. 快速优化yum (for centos5.5)
  12. API经济产业
  13. android:editable is deprecated: Use an &lt;EditText&gt; to make it editable
  14. 安装php提示 configure: error: Cannot find OpenSSL&#39;s libraries 解决方案
  15. python_控制台输出带颜色的文字方法
  16. 使用PowerApps快速构建基于主题的轻业务应用 &mdash;&mdash; 进阶篇
  17. HIT创业感言:只有长寿的企业才有持续价值
  18. Spring详解
  19. 谁在call我-backtrace的实现原理【转】
  20. OpenH264编译ffmpeg android

热门文章

  1. HTML5 &lt;meta&gt; 标签属性,所有meta用法
  2. (打补丁 )patch
  3. 【剑指offer】Java实现(持续更新中)
  4. PAT L1-034 点赞
  5. 手机uc不支持伪元素使用animation动画;移动端background-attachment:fixed不兼容性
  6. PHP中普通属性和静态属性
  7. 【Python】python操作mysql
  8. HDU4473_Exam
  9. 【转】ssh免密码登录的原理
  10. Django获取多个数据及文件上传