zoukankan      html  css  js  c++  java
  • Luogu4451 [国家集训队]整数的lqp拆分

    题目链接:洛谷

    题目大意:求对于所有$n$的拆分$a_i$,使得$sum_{i=1}^ma_i=n$,$prod_{i=1}^mf_{a_i}$之和。其中$f_i$为斐波那契数列的第$i$项。

    数据范围:$nleq 10^6$


    首先不要被这个【国家集训队】给吓到了,其实很简单的。

    首先考虑打表,。。。。(逃

    显然一眼就能想到卷积,设$F(x)$为$f$的生成函数。则

    $$F(x)=frac{x}{1-x-x^2}$$

    $$Ans=sum_{i=0}^nF^i(x)[x^n]$$

    $$=frac{1}{1-frac{x}{1-x-x^2}}[x^n]$$

    $$=frac{x}{1-2*x-x^2}[x^n]$$

    根据直觉,这个多项式也是一个常系数齐次线性递推数列的生成函数,设为$G(x)$则

    $$G(x)=2xG(x)+x^2G(x)+x$$

    所以$g_{n+1}=2*g_n+g_{n-1}$

    然后连矩阵乘法都不用就直接A了。

     1 #include<cstdio>
     2 #define Rint register int
     3 using namespace std;
     4 const int mod = 1e9 + 7;
     5 int n, f1, f2, f3;
     6 int main(){
     7     scanf("%d", &n);
     8     f1 = 0; f2 = 1;
     9     if(n == 1){puts("1"); return 0;}
    10     for(Rint i = 2;i <= n;i ++){
    11         f3 = (2ll * f2 + f1) % mod;
    12         f1 = f2; f2 = f3;
    13     }
    14     printf("%d", f3);
    15 }
    View Code
  • 相关阅读:
    html 注释和特殊字符
    html 锚点链接
    html 链接标签
    spring 利用工厂模式解耦
    html 路径
    html 图像标签
    html div和span标签
    html 文本格式化标签
    P5358 [SDOI2019]快速查询
    luoguP2679 子串
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/10623651.html
Copyright © 2011-2022 走看看