基准时间限制: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 ;
}

51nod1149 Pi的递推式的更多相关文章

  1. 51nod 1149 Pi的递推式(组合数学)

    传送门 解题思路 首先因为\(Pi\)不是整数,所以不能直接递推.这时我们要思考这个式子的实际意义,其实\(f(i)\)就可以看做从\(i\)这个点,每次可以向右走\(Pi\)步或\(1\)步,走到[ ...

  2. 【51nod】1149 Pi的递推式

    题解 我们把这个函数的递归形式画成一张图,会发现答案是到每个出度为0的点的路径的方案数 这个可以用组合数算 记录一下P[i]为i减几次PI减到4以内 如果P[i + 1] > P[i],那么转向 ...

  3. 51NOD 1149:Pi的递推式——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1149 F(x) = 1 (0 <= x < 4) F(x) ...

  4. 51nod 1149 Pi的递推式 组合数

    题目大意: \(F(x) = 1 (0 \leq x < 4)\) \(F(x) = F(x-1) + F(x-\pi) (4 \leq x)\) 给定\(n\),求\(F(n)\) 题解: 我 ...

  5. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  6. P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)

    https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...

  7. hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)

    题意:有一个递推式f(x) 当 x < 10    f(x) = x.当 x >= 10  f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ...

  8. Tyche 2191 WYF的递推式

    题目描述 WYF手中有这样一条递推式 WYF并不是想让你帮他做出结果,事实上,给定一个n,他能够迅速算出Fn.WYF只是想单纯的考验一下读者们. 输入描述 仅一行,三个整数N,F1,P 输出描述 仅一 ...

  9. HDU - 2604 Queuing(递推式+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

随机推荐

  1. rsyslog配置文件详解(rsyslog.conf)

    # rsyslog configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # ...

  2. Java final用法

    //继承弊端:打破了封装性. /* final关键字: 1,final是一个修饰符,可以修饰类,方法,变量. 2,final修饰的类不可以被继承. 3,final修饰的方法不可以被覆盖. 4,fina ...

  3. MySQL 忘记root密码怎么办

    前言:记住如果忘记root密码,在启动MySQL的时候,跳过查询授权表就ok了. 对于RedHat 6 而言 (1)启动mysqld 进程时,为其使用:--skip-grant-tables --sk ...

  4. 3.结对编程成果报告(小学生四则运算的出题程序,Java实现)

    程序名称:小学生四则运算的出题程序 先附上代码: package com.makequestion; import java.text.DecimalFormat;import java.util.R ...

  5. linux之JDK安装

    1.JDK安装 a.卸载JDK (1)卸载默认的JDK 用root用户登陆到系统,打开一个终端输入 # rpm -qa|grep gcj 显示内容其中包含下面两行信息 # java-1.4.2-gcj ...

  6. linux 转移mysql文件操作流程

    1.现将mysql停服 2.将文件拷贝到指定目录cp ./sales_trade_2.ibd /db/data/mysql/data_warehouse/sales_trade_2.ibd 3.检查新 ...

  7. 简单的 php 防注入、防跨站 函数

    /** * 简单的 php 防注入.防跨站 函数 * @return String */ function fn_safe($str_string) { //直接剔除 $_arr_dangerChar ...

  8. 两个float 怎么比较大小

    转自:http://blog.csdn.net/mydriverc2/article/details/49888947 float 类型不能比较相等或不等,但可以比较>,<,>=,& ...

  9. Idea报错Command line is too long

    需要在该项目文件夹下.idea/workspace.xml中添加 <component name="PropertiesComponent"> ... <prop ...

  10. iOS-开发者账号与证书

    0.开发者账号的申请 1.iOS-证书相关 2.iOS-证书申请 3.iOS-APNS证书申请与使用 4.iOS-App发布证书的申请与使用