#特征方程,dp,快速幂#洛谷 4451 [国家集训队]整数的lqp拆分
分析
设\(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}\)
答案就是
\]
代入\(x_1,x_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拆分的更多相关文章
- 洛谷P4451 [国家集训队]整数的lqp拆分 [生成函数]
传送门 题意简述:语文不好不会写,自己看吧 思路如此精妙,代码如此简洁,实是锻炼思维水经验之好题 这种题当然是一眼DP啦. 设\(dp_n\)为把\(n\)拆分后的答案.为了方便我们设\(dp_0=1 ...
- 洛谷 P4451 [国家集训队]整数的lqp拆分
洛谷 这个题目是黑题,本来想打表的,但是表调不出来(我逊毙了)! 然后随便打了一个递推,凑出了样例, 竟然. 竟然.. 竟然... A了!!!!!!! 直接:\(f[i]=f[i-1]*2+f[i-2 ...
- 洛谷P4451 [国家集训队]整数的lqp拆分(生成函数)
题面 传送门 题解 我对生成函数一无所知 我们设\(F(x)\)为斐波那契数列的生成函数,\(G(x)\)为答案的生成函数,那么容易得到递推关系 \[g_n=\sum_{i=0}^{n-1}f_ig_ ...
- Luogu4451 [国家集训队]整数的lqp拆分
题目链接:洛谷 题目大意:求对于所有$n$的拆分$a_i$,使得$\sum_{i=1}^ma_i=n$,$\prod_{i=1}^mf_{a_i}$之和.其中$f_i$为斐波那契数列的第$i$项. 数 ...
- [国家集训队]整数的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}^ ...
- BZOJ 2173 luoguo P4451 [国家集训队]整数的lqp拆分
整数的lqp拆分 [问题描述] lqp在为出题而烦恼,他完全没有头绪,好烦啊… 他首先想到了整数拆分.整数拆分是个很有趣的问题.给你一个正整数N,对于N的一个整数拆分就是满足任意m>0,a1 , ...
- P4451 [国家集训队]整数的lqp拆分
#include <bits/stdc++.h> using namespace std; typedef long long LL; inline LL read () { LL res ...
- [国家集训队]整数的lqp拆分 数学推导 打表找规律
题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波 ...
- 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)
洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...
- 【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线
P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...
随机推荐
- Python笔记五之正则表达式
本文首发于公众号:Hunter后端 原文链接:Python笔记五之正则表达式 这一篇笔记介绍在 Python 里使用正则表达式. 正则表达式,Regular Expression,可用于在一个目标字符 ...
- postgresql中的json和jsonb
1. 简介postgresql9.3以后,我们可以将表的字段类型设置为json.同时,postgresql还提供了jsonb格式,jsonb是json的二进制形式.二者区别: postgresql9. ...
- 项目实战:Qt管道焊接参数条码打印系统(条码打印机TSC 244 Pro、打印条码、打印中文、打印字符、多张连续打印)
需求 电脑端通过条码打印机TSC-TTP244 Pro: 1. 打印出尺寸为60*30cm 2. 条码打印机TSC-TTP244 Pro 不干胶纸 (不需要碳带,热敏纸) 3. window ...
- python列表操作的大O效率
- Alpine安装gcc g++ make编译环境
apk add gcc g++ make cmake gfortran libffi-dev openssl-dev libtool
- python定义类模块之attr
# attr可以简单理解为namedtuple的增强版 import attr @attr.s class Point(object): x = attr.ib(default=1) # 定义默认参数 ...
- 数仓的等待视图中,为什么会有Hashjoin-nestloop
本文分享自华为云社区<GaussDB(DWS)等待视图之Hashjoin-nestloop>,作者:Arrow0lf. 1. 业务场景 众所周知,GaussDB(DWS)中有3种常见的jo ...
- 第128篇:浏览器存储(cookie、webStorage、 IndexedDB)
好家伙,本篇为<JS高级程序设计>第二五章"浏览器存储"学习笔记 我们先来讲个故事 一个"薅羊毛"的故事 (qq.com) 概括一下,就是 有个人通 ...
- go grpc流式和非流式的例子
参考grpc官方: https://grpc.io/docs/quickstart/go.html 或官方中文翻译: http://doc.oschina.net/grpc?t=60133 安装pr ...
- 网络流与各种建模(I)
网络流与各种建模(I) 网络流基础 这里默认读者学习过网络流和MCMF,这里仅作复习 网络流解决的问题是给一个源点和汇点,每个边有最大流量,最大化从源点放水到汇点的速率. 网络流的时间复杂度是 \(O ...