题目


分析

设\(dp[n]\)表示答案,因为\(dp[n]=\sum\prod_{i=1}^mF_{a_i}\)

\(dp[n]=\sum_{i=1}^{n-1}dp[i]*F_{n-i-1}\)

那么\(dp[i+1]-dp[i]=\sum_{j=1}^idp[j]*F_{i-j+1}-\sum_{j=1}^{i-1}dp[j]*F_{i-j}\)

\(=dp[i]+\sum_{j=1}^{i-1}dp[j]*(F_{i-j+1}-F_{i-j})=dp[i]+\sum_{j=1}^{i-1}dp[j]*F_{i-j-1}\)

因为当\(j=i-1\)时,\(F_{i-j-1}=F_{0}=0\),所以\(=dp[i]+\sum_{j=1}^{i-2}dp[j]*F_{i-1-j}=dp[i]+dp[i-1]\)

所以\(dp[i+1]=2*dp[i]+dp[i-1]\),上面推导可以用生成函数做,不过我不会

其实我好像去年已经写了弱化版(\(n\leq 10^6\)),结果现在数据范围加强到\(n\leq 10^{10000}\)

因为知道\(dp[0]=0,dp[1]=1\)(废话),所以其实可以用矩阵乘法写,不过常数好像有点点大

考虑利用特征方程求解,用待定系数法,设其满足

\(dp[n+1]-a*dp[n]=b(dp[n]-a*dp[n-1])\)

套一套上式\(dp[n+1]-dp[n]=dp[n]-dp[n-1]\)

那么其实\(a=1,b=1\),且\(dp[n+1]-(a+b)dp[n]-ab*dp[n-1]=0\)

由于\((a+b)=2,-ab=-1\),所以其实解的是\(x^2-2x-1=0\)的方程的解

得到两个实数根分别为\(x_1=1+\sqrt{2},x_2=1-\sqrt{2}\)

答案就是

\[dp[n]=\frac{dp[1]-x_2dp[0]}{x_1-x_2}{x_1}^n+\frac{dp[1]-x_1dp[0]}{x_2-x_1}{x_2}^n
\]

代入\(x_1,x_2\)并化简可以得到

\[dp[n]=\frac{(1+\sqrt{2})^n-(1-\sqrt{2})^n}{2\sqrt{2}}
\]

而且\(\sqrt{2}\)在模\(10^9+7\)的意义下等同于\(59713600\)

况且还有费马小定理,就可以\(O(log_2mod)\)求解啦


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int mod=1e9+7,sqrt2=59713600,inv=14928400;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans*10ll+c-48)%(mod-1),c=getchar();
return ans;
}
inline signed ksm(int x,int y){
rr int ans=1;
for (;y;y>>=1,x=1ll*x*x%mod)
if (y&1) ans=1ll*ans*x%mod;
return ans;
}
inline signed mo2(int x,int y){return x<y?x-y+mod:x-y;}
signed main(){
rr int n=iut(),A=sqrt2+1,B=mod-sqrt2+1;
return !printf("%d",1ll*inv*mo2(ksm(A,n),ksm(B,n))%mod);
}

#特征方程,dp,快速幂#洛谷 4451 [国家集训队]整数的lqp拆分的更多相关文章

  1. 洛谷P4451 [国家集训队]整数的lqp拆分 [生成函数]

    传送门 题意简述:语文不好不会写,自己看吧 思路如此精妙,代码如此简洁,实是锻炼思维水经验之好题 这种题当然是一眼DP啦. 设\(dp_n\)为把\(n\)拆分后的答案.为了方便我们设\(dp_0=1 ...

  2. 洛谷 P4451 [国家集训队]整数的lqp拆分

    洛谷 这个题目是黑题,本来想打表的,但是表调不出来(我逊毙了)! 然后随便打了一个递推,凑出了样例, 竟然. 竟然.. 竟然... A了!!!!!!! 直接:\(f[i]=f[i-1]*2+f[i-2 ...

  3. 洛谷P4451 [国家集训队]整数的lqp拆分(生成函数)

    题面 传送门 题解 我对生成函数一无所知 我们设\(F(x)\)为斐波那契数列的生成函数,\(G(x)\)为答案的生成函数,那么容易得到递推关系 \[g_n=\sum_{i=0}^{n-1}f_ig_ ...

  4. Luogu4451 [国家集训队]整数的lqp拆分

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

  5. [国家集训队]整数的lqp拆分

    我们的目标是求$\sum\prod_{i=1}^m F_{a_i}$ 设$f(i) = \sum\prod_{j=1}^i F_{a_j}$那么$f(i - 1) = \sum\prod_{j=1}^ ...

  6. BZOJ 2173 luoguo P4451 [国家集训队]整数的lqp拆分

    整数的lqp拆分 [问题描述] lqp在为出题而烦恼,他完全没有头绪,好烦啊… 他首先想到了整数拆分.整数拆分是个很有趣的问题.给你一个正整数N,对于N的一个整数拆分就是满足任意m>0,a1 , ...

  7. P4451 [国家集训队]整数的lqp拆分

    #include <bits/stdc++.h> using namespace std; typedef long long LL; inline LL read () { LL res ...

  8. [国家集训队]整数的lqp拆分 数学推导 打表找规律

    题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波 ...

  9. 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)

    洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...

  10. 【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线

    P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...

随机推荐

  1. 50从零开始用Rust编写nginx,原来TLS证书还可以这么申请

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 负载均衡, 静态文件服务器,websocket代理,四层TCP/UDP转发,内网穿透等,会将实 ...

  2. Redis居然还有比RDB和AOF更强大的持久化方式?

    https://cloud.tencent.com/developer/article/1786055

  3. Qt开发技术:QCharts(四)QChart面积图介绍、Demo以及代码详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  4. 【Azure 环境】在Azure活动目录中的应用注册,给应用添加API权限时发现API权限配置缺失

    问题描述 在Azure活动目录中的应用注册,给应用添加API权限时,SecurityEvents.Read.All和IdentityRiskEvent两个权限,在Microsoft graph中找不到 ...

  5. Ubuntu20下安装NFS

    安装nfs-kernel-server apt install nfs-kernel-server 想好自己要把哪个目录作为NFS共享目录,创建目录 mkdir /mydata vim /etc/ex ...

  6. linux压缩文件并排除指定目录

    今天要在linux上打包一个项目另作他用,但是项目图片都是放本地服务器的,整个项目打包好后有2G多下载十分费时.项目中的图片我们可以不要,所以压缩的时候要排除图片目录. 具体命令如下: // 参数说明 ...

  7. settings.json 20201209

    李昱版 { "editor.fontSize": 20, "workbench.iconTheme": "material-icon-theme&qu ...

  8. .Net接口版本管理与OpenApi

    前言 作为开发人员,我们经常向应用程序添加新功能并修改当前的 Api.版本控制使我们能够安全地添加新功能而不会造成中断性变更.一个良好的 Api 版本控制策略可以清晰地传达所做的更改,并允许使用现有 ...

  9. C语言中的rand()函数实例分析

    一 前记: c语言中需要用到随机值得时候,每次都自己写,这样太浪费效率了,这次遇到了一个经典的代码,就珍藏起来吧. 二 实例分析: 1 #include <stdio.h> 2 3 int ...

  10. day11-2-内置Tomcat的配置和切换

    SpringBoot内置Tomcat的配置和切换 1.基本介绍 SpringBoot支持的webServer:Tomcat,Jetty,Undertow 因为在spring-boot-starter- ...