#特征方程,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.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...
随机推荐
- 【八股cover#1】MySQL Q&A与知识点
MySQL Q&A与知识点 1.基础知识 什么是主键? 它用来唯一标识一条记录(一个字段).每个表都必须有且只能有一个主键,主键的取值不允许为空,而且在表中必须是唯一的(当然还可以有复合主键) ...
- 【LeetCode二叉树#03】翻转二叉树的几种方法
翻转二叉树 力扣题目链接(opens new window) 翻转一棵二叉树. 这道题目背后有一个让程序员心酸的故事,听说 Homebrew的作者Max Howell,就是因为没在白板上写出翻转二叉树 ...
- 【Azure Developer】PHP网站使用AAD授权登录的参考示例
问题描述 如果有个PHP网站,需要使用AAD授权登录,有没有PHP代码实例 可供参考呢? 参考代码 参考一篇博文(Single sign-on with Azure AD in PHP),学习使用SS ...
- 使用JMeter的JSON提取器:通过递归下降查找,从接口响应中提取特定字段
在接口测试中,我们经常需要从返回的JSON数据中提取特定字段以便后续使用.JMeter提供了JSON提取器,可以帮助我们实现这一目标.本文将介绍如何使用JMeter的JSON提取器通过递归下降查找的方 ...
- 2024年,提升Windows开发和使用体验实践 - 终端&命令行篇
前言 经过前面的铺垫,终于继续更新了,这个大概率是本系列近期的最后一篇了. 同时之前有些内容更新,我也补充到这一篇里面. 关于 scoop 管理器的补充 scoop 常用命令 scoop help # ...
- Server-side template injection 模板注入问题总结
概念: 服务器模板注入(Server-side template injection) 攻击者能够使用本地的模板语法去注入一个恶意的payload,然后在服务器端执行该攻击,当与欧股直接输入数据到模板 ...
- 当未指定且存在多个构造器,实例化对象时Spring如何选择?
前言 在前面的讲解中,我们了解了如何获取构造器.当只有一个符合条件的构造器时,自然会选择它作为初始化的构造器.然而,在上一节中,我们遇到了一种特殊情况:当有多个符合条件的构造器时,返回的是一个数组.在 ...
- 在linux上安装redis并设置权限
redis是使用 c 开发,启动文件是二进制的看不到什么有用的信息,安装最新版本可以在https://redis.io/download 官网上查看,安装非常简单: mkdir /usr/redis, ...
- linux下命令行打开文件夹窗口
方法一: 使用自带的命令:nautilus . 打开当前文件夹 nautilus . 打开指定路径文件夹 nautilus ddd/ccc/ 方法二:xdg-open xdg-open 命令相当于在 ...
- 曲线艺术编程第一章 coding curves
原作:Keith Peters 原文:https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http ...