矩阵优化递推式子

news2024/10/7 17:29:46

题目链接

对于f(n)=3f(n−1)+2f(n−2)+2这种式子,先将右边拥有的项竖着列出来,不包括系数,再将这个竖列的下一项写出来,然后将右边的每一项按照左边顺序的等式写出来,然后我们将等式右边只保留系数,那么这些系数就是我们需要的矩阵

        于是我们得到了系数矩阵,然后我们只需要求出系数矩阵的n-2次幂,最后再和第一项矩阵的乘积即可,也就是{f(2),f(1),2}(这是竖着的),也就是(1,1,2)。最后的左上角第一项就是答案f(n)。

        代码:

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
//#define int long long
//const ll P=2281701377;
const ll P=998244353;
const int mod=1e9+7;
#define fi first
#define se second
#define int ll

struct node{
	int n,m;
	int a[5][5];
	node(){
		memset(a,0,sizeof(a));
	}
	node(int x){
		memset(a,0,sizeof(a));
		a[0][0]=a[1][1]=a[2][2]=x;
	}
	node operator *(const node &b){
		node res;
		for(int k=0;k<3;k++)
			for(int i=0;i<3;i++)
				for(int j=0;j<3;j++)
					res.a[i][j]=(res.a[i][j]+(ll)a[i][k]*b.a[k][j])%mod;
		return res;
	}
};

node qpow(node a,ll b){
	node s(1);
	while(b){
		if(b&1) s=s*a;
		a=a*a;
		b>>=1;
	}
	return s;
}


int n;
void solve(){
	cin>>n;
	node q;
	q.a[0][0]=q.a[1][0]=1,q.a[2][0]=2;
	node a;
	a.a[0][0]=3,a.a[0][1]=2,a.a[0][2]=1;
	a.a[1][0]=a.a[2][2]=1;
	if(n<=2)
		cout<<1<<endl;
	else{
		ll m=n-2;
		node t=qpow(a,m);
		t=t*q;
		cout<<t.a[0][0];
	}
}
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }

}

题目链接        

和上题一样,就是将n-2次改成n-1次,因为f(n)的下标可以到0了,也就是可以多乘一个系数矩阵。系数矩阵和第一项矩阵:

          

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
//#define int long long
//const ll P=2281701377;
const ll P=998244353;
const int mod=1e9+7;
#define fi first
#define se second
#define int ll

struct node{
	int n,m;
	int a[7][7];
	node(){
		memset(a,0,sizeof(a));
	}
	node(int x){
		memset(a,0,sizeof(a));
		for(int i=0;i<6;i++)
			a[i][i]=x;
	}
	node operator *(const node &b){
		node res;
		for(int k=0;k<6;k++)
			for(int i=0;i<6;i++)
				for(int j=0;j<6;j++)
					res.a[i][j]=(res.a[i][j]+(ll)a[i][k]*b.a[k][j])%mod;
		return res;
	}
};

node qpow(node a,ll b){
	node s(1);
	while(b){
		if(b&1) s=s*a;
		a=a*a;
		b>>=1;
	}
	return s;
}


int n;
void solve(){
	cin>>n;
	node q;
	q.a[0][0]=1,q.a[1][0]=0,q.a[2][0]=8,q.a[3][0]=4,q.a[4][0]=2,q.a[5][0]=1;
	node a;
	a.a[0][0]=a.a[0][1]=a.a[0][2]=a.a[0][3]=a.a[0][4]=a.a[0][5]=1;
	a.a[1][0]=1;
	a.a[2][2]=a.a[2][5]=1,a.a[2][3]=a.a[2][4]=3;
	a.a[3][3]=a.a[3][5]=1,a.a[3][4]=2;
	a.a[4][4]=a.a[4][5]=1;
	a.a[5][5]=1;
	if(n==0)
		cout<<0<<endl;
	else if(n==1)
		cout<<1<<endl;
	else{
		ll m=n-1;
		node t=qpow(a,m);
		t=t*q;
		cout<<t.a[0][0]<<endl;
	}
}
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1891918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HR人才测评,什么是观察能力,如何提高观察能力?

什么是观察能力&#xff1f; 观察能力是指一个人有计划有目的地去看、去听、去闻、去尝、去思考某种事物&#xff0c;在现实生活中&#xff0c;观察力强意味着人的感知能力强&#xff0c;感知能力强的人对某种信息的捕捉非常准确&#xff0c;其往往能凭借这种杰出的能力&#…

防爆对讲终端是什么?在哪些行业中应用广泛?

防爆对讲终端是一种特殊设计的通信设备&#xff0c;它具备防爆性能和可靠的通信功能&#xff0c;确保在存在爆炸性气体或粉尘的危险环境中使用时不会引发爆炸或火灾等危险情况。这种设备通过特殊的设计和防护措施&#xff0c;如采用防爆材料、防静电、绝缘、阻燃材料等&#xf…

嵌入式学习——硬件(Linux内核编程)——day58

1. linux内核 1.1 定义 Linux内核本质上是一个复杂的程序。它是操作系统中最核心的部分&#xff0c;直接与计算机硬件交互并管理系统资源。尽管内核是一个程序&#xff0c;但它不同于一般的应用程序。它运行在系统的最高权限级别&#xff0c;直接控制硬件并为其他软件提供基础…

场景管理分析平台介绍

在数字化浪潮的推动下&#xff0c;数据已成为企业决策的重要依据。特别是在智能驾驶、虚拟现实和物联网等领域&#xff0c;场景数据的高效管理和利用至关重要。在智能驾驶领域面对海量的场景数据&#xff0c;如何高效处理、精准分析&#xff0c;并将其转化为有价值的决策支持&a…

Go语言--递归函数

递归函数 递归指所数可以直接或问接的调用自身。递归函数通常有相同的结构:一个跳出条件和一个递归体。所谓跳出条件就是根据传入的参数判断是否需要停止递归&#xff0c;而递归体则是函数自身所做的一些处理。 普通函数的调用流程 递归函数调用流程 一定要写终止条件。 实现…

C语言刷题小记1

前言 本篇博客和大家分享一些C语言的OJ题目&#xff0c;希望大家可以通过这些题目进一步提升自己的编程能力&#xff0c;如果你对本篇内容感兴趣&#xff0c;可以一键三连&#xff0c;多多关注&#xff0c;下面进入正文部分。 题目1 十六进制转十进制 描述 BoBo写了一个十六…

JS(JavaScript) 数据校验 正则表达式

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

什么?2024年只要 HTML 和 CSS 就可以实现一个自适应的瀑布流页面了?

瀑布流页面布局&#xff0c;故名思义就是页面上的元素子项像瀑布一样进行上下紧凑布局&#xff0c;一般图片类网站、电商类或者博客类的网站经常会使用这种布局&#xff0c;使得展示的元素比较紧凑和丰富&#xff0c; 类似下图 这里总结一下瀑布流布局主要有以下特征&#xff1…

java生成json格式文件(包含缩进等格式)

生成json文件的同时保留原json格式&#xff0c;拥有良好的格式&#xff08;如缩进等&#xff09;&#xff0c;提供友善阅读支持。 pom.xml依赖增加&#xff1a; <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactI…

物联网综合实验平台-物联网实验实训教学平台-物联网实验箱

物联网&#xff08;IoT&#xff09;是一种连接性技术&#xff0c;将各种设备和物品连接到互联网&#xff0c;通过数据的收集和分析实现更智能的决策和操作。在《“十四五”数字经济发展规划》中&#xff0c;物联网被明确提出&#xff0c;被视为数字经济时代的基础设施。当前&am…

基于循环神经网络的一维信号降噪方法(简单版本,Python)

代码非常简单。 import torch import torch.nn as nn from torch.autograd import Variable from scipy.io.wavfile import write #need install pydub module #pip install pydub import numpy as np import pydub from scipy import signal import IPython import matplot…

NAT地址转换实验,实验超简单

实验拓扑 实验目的 将内网区域&#xff08;灰色区域&#xff09;的地址转换为172.16.1.0 实验过程 配置静态NAT&#xff08;基于接口的静态NAT&#xff09; R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname R1 [R1]un in en I…

LoadRunner-Virtual User Generator组件学习(录制不上内容)

重点知识 LR工具是拿C写的&#xff0c;所以它的脚本默认也是C&#xff0c;但是最终生成的脚本不止是C&#xff0c;它是支持C和Java语言的&#xff0c;这个大家要清楚&#xff0c;对本身懂代码的就很友好&#xff0c;你了解java&#xff0c;那就可以把脚本改成java&#xff0c;…

第十二章 Nest中 Express 和 Fastify

Express是一个用于构建Web应用程序和API的JavaScript框架。它是基于Node.js平台的&#xff0c;并提供了一系列简化了常见Web开发任务的功能&#xff0c;如路由、中间件、模板引擎和数据库集成等。 是一个处理请求、响应的库 其可以通过use一个个中间件来处理请求和返回响应&…

随手记录: Ubuntu NVIDIA显卡驱动安装后 屏幕亮度无法调节 无法连接外显示器等问题

背景 一句话&#xff1a;简单记录帮身边人装系统发现 GPU和外接显示器的无法连接&#xff0c;同时亮度无法调节等新问题 设备型号&#xff1a; 联想笔记本&#xff1a;ThinkBook 16p Gen2CPU&#xff1a;AMD Ryzen 7 5800HGPU&#xff1a;RTX 3060 问题描述及流程&#xff…

深度学习标注文件格式转换

json转xml 原始数据集文件夹中图片格式为bmp&#xff0c;标注文件为json&#xff0c;图片和标注文件放在同一个文件夹下面&#xff0c;将json转为xml格式&#xff0c;图片和标注文件分别存放在一个文件夹下面。 headstr """\ <annotation><folder>…

【CSS in Depth 2 精译】2.4 视口的相对单位

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位 ✔️2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.4 视口的相对单位 前面介绍过的 em 和 rem 是相对于 font-size 定义的&#xff0…

React+TS前台项目实战(二十四)-- 全局常用绘制组件Qrcode封装

文章目录 前言Qrcode组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示(pc端 / 移动端) 总结 前言 今天要封装的Qrcode 组件&#xff0c;是通过传入的信息&#xff0c;绘制在二维码上&#xff0c;可用于很多场景&#xff0c;如区块链项目中的区块显示交易地址时就可以用到…

DDOS攻击不懂?看完让你秒懂!

什么是DDOS攻击&#xff1f; DDoS攻击&#xff0c;全称分布式拒绝服务攻击&#xff08;Distributed Denial of Service attack&#xff09;&#xff0c;是一种常见的网络安全攻击方式。以下是对DDoS攻击的详细解释: DDoS攻击是指攻击者利用大量被控制的计算机或设备&#xff…

Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现。由于时间的关系&#xff0c;宏哥这里用代码给小伙伴演示两个模块&#xff1a;注册和登录。 2.业务模块封装 因为现在各种APP的层出不群&#xff0c;各式各样的。但是其大多数都有注册、登录。为…