左神:中级提升班5

news2024/11/15 6:19:27

1.斐波那切数列套路

        1.1F(N)=F(N-1)+F(N-2)

        1.2F(N)=3F(N-1)-4F(N-3)+6F(N-5)

        1.3生牛问题

        1.4达标串数量

        1.5取最少的木棍

2.背包问题

3.找工作

4.判断是否符合人类正常书写


1.斐波那切数列套路

1.1F(N)=F(N-1)+F(N-2)

 

线性代数:
1. 利用初始项可以吧a,b,c,d算出来
2. a=b=c=1,d=0
3. 假设由abcd组成的矩阵为D
4. |F(N),F(N-1)|=|1,1|*D^(n-2)
5. 问题转成如何计算一个矩阵的幂次方
  5.1 先理解O(logn)计算一个数的幂次方
//时间复杂度为O(logn)计算num的n次方
int power(int num, int n) {
	int res = 1;
	int t = num;
	while (n > 0) {//把n看作2进制数,哪一位是1,就让res乘等于对应的10的幂次方
		if ((n & 1) == 1) {//当前位(最低位)是1
			res *= t;
		}
		n >>= 1;
		t *= num;
	}
	return res;
}
  5.2 计算矩阵的幂次方:如上图所示
6.所以完成了O(logn)计算斐波那契数
//返回矩阵m1、m2相乘的结果
vector<vector<int>>muliMatrix(vector<vector<int>>& m1, vector<vector<int>>& m2) {
	vector<vector<int>>res(m1.size(), vector<int>(m2[0].size()));
	for (int i = 0; i < m1.size(); i++) {
		for (int j = 0; j < m2[0].size(); j++) {
			for (int k = 0; k < m2.size(); k++) {
				res[i][j] += m1[i][k] + m2[k][j];
			}
		}
	}
	return res;
}

vector<vector<int>>matrixPower(vector<vector<int>>& m, int p) {
	vector<vector<int>>res(m.size(), vector<int>(m[0].size()));
	for (int i = 0; i < res.size(); i++) {//令矩阵对角线全为1,其他都为0
		res[i][i] = 1;
	}
	vector<vector<int>>t = m;
	for (; p != 0; p >>= 1) {
		if ((p & 1) == 1) {
			res = muliMatrix(res, t);
		}
		t = muliMatrix(t, t);
	}
	return res;
}

//O(logn)计算斐波那切数
int fi(int n) {
	if (n < 1)return 0;
	if (n == 1 || n == 2) return 1;
	vector<vector<int>>base = { {1,1},
													{1,0} };
	vector<vector<int>>res = matrixPower(base, n - 2);
	/*
	| F(N), F(N - 1) |= | 1, 1 | *D ^ (n - 2)
	假设D^(n-2)={{X,Y},{P,Q}}
	X+P=F(N)
	Y+Q=F(N-1)
	*/ 
	return res[0][0] + res[1][0];//X=res[0][0],P=res[1][0]
}

1.2F(N)=3F(N-1)-4F(N-3)+6F(N-5)

 |5*5|:5*5的矩阵

 1.3生牛问题

一头牛从出生到成熟可生牛的时间为3年,假设第1年只有1头牛,那么第n年总共有几头牛?
PS:牛不会死,一头牛每年只生一只牛
F(N)=F(N-1)+F(N-3)
F(N-1):前一年留下的牛
F(N-3):三年前的牛全都成熟后生下的新牛数
所以,利用3阶矩阵解决问题
|F(N),F(N-1),F(N-2)|=|F(3),F(2),F(1)|*D^(n-2)

1.4达标串数量

 思路:
    1. 求长度为i的达标串数量
    2. 第0位上的肯定是1,所以看后面i-1位
      2.1 s[1]=1:达标串数量为 F(i-1)
      2.2 s[1]=0,那么s[2]必定是1:达标串数量为 F(i-2)
    3. F(i)=F(i-1)+F(i-2)

 1.5取最少的木棍

 思路:
保留斐波那切数,其他全删去

2.背包问题

 思路:
动态规划二维表:行(各零食体积),列(1~w)
dp[i][j]=dp[i-1][j]+dp[i][j-arr[i]];//不选择i零食的情况+选择i零食的情况

 3.找工作

思路:
    1.创建有序表,难度不同的按难度从小到大,难度相同的为一组,按照报酬从大到小排
    2.同组的只留组长(报酬高的)
    3.把难度提升但是报酬不提高的工作删去
    4.最终只留下难度和报酬单调递增的工作

class Job {
public:
	int money;
	int hard;
	
	Job(int money, int hard) {
		this->money = money;
		this->hard = hard;
	}
};

class JobComparator {
public:
	bool compare(Job o1, Job o2) {
		return o1.hard != o2.hard ? o2.hard - o1.hard : o1.money - o2.money;
	}
};

vector<int>getMoneys(vector<Job>job,vector<int>ability){
	sort(job.begin(), job.end(), JobComparator());
	//难度为key的工作,最优工资是value
	map<int, int>map;
	map[job[0].hard] = job[0].money;
	Job pre = job[0];
	for (int i = 0; i < job.size(); i++) {
		if (job[i].hard != pre.hard && job[i].money > pre.money) {//前者只保留组长,后者删去不保证单调性的工作
			pre = job[i];
			map[job[i].hard] = job[i].money;
		}
	}
	vector<int>ans(ability.size());
	for (int i = 0; i < ability.size(); i++) {
		auto it = map.upper_bound(ability[i]);//找到第一个大于该能力值的工作
		if (it != map.begin()) {
			it--;
			ans[i] = it->second;
		}
		else {//找不到匹配的工作
			ans[i] = 0;
		}
	}
	return ans;
}

 4.判断是否符合人类正常书写

思路:
    1.除了数字之外,只允许出现负号
    2.如果有负号,只会出现在开头,且只出现一次
    3.负号必须跟着数字,且不可以是0
    4.如果开头字符是0,后面不能有其他数字
    5.判断越界:将字符串转成数字,且都转为负数,因为|INT_MIN|-|INT_MAX|=1
    6.定义两个变量:int minq=INT_MIN/10;int minr=INT_MIN%10;用于判断是否越界
    7.if(res<minq||res==minq&&cur<minr),判断溢出条件 

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

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

相关文章

【面试题】https协议

1. http和https的区别 http是明文传输&#xff0c;敏感信息容易被中间劫持。https在http协议的基础上&#xff0c;增加了加密的特性&#xff0c;数据被劫持了也无法解密。现代浏览器已经开始强制使用https协议。 2. https的加密方式 2.1 对称加密 对称加密&#xff1a;使用…

[激光原理与应用-38]:《光电检测技术-5》- 光学测量基础 - 光调制

目录 一、光调制概述 1.1 什么是光调制 1.2 激光的光调制方法 1.3 光调制的调制 二、直接调制法 三、腔内调制法 3.1 被动调制&#xff1a; 3.2 主动调制&#xff1a; 四、腔外调制法 五、新型光调制 5.1 基于强度调制 5.2 基于相位调制 5.3 基于偏振调制 一、光调…

【前端】面试题6~10

目录 一、说一说BFC 1、BFC的概念 2、BFC布局规则 3、BFC形成的条件 3、BFC解决能的问题 4、BFC的其他 5、总结 二、说一说Vuex是什么&#xff0c;每个属性是干嘛的&#xff0c;如何使用 &#xff1f; 1、Vuex是什么 2、Vuex 的属性 3、使用方法 4、简单总结 三、说…

Jsp基础了解(二)

文章目录Jsp基础了解&#xff08;一&#xff09;7&#xff0c;MVC模式和三层架构7.1 MVC模式7.2 三层架构7.3 MVC 和 三层架构8&#xff0c;案例8.1 环境准备8.1.1 创建工程8.1.2 创建包8.1.3 创建表8.1.4 创建实体类8.1.5 准备mybatis环境8.2 查询所有8.2.1 编写BrandMapper8.…

无模型深度强化学习算法

无模型深度强化学习算法&#xff1a;直接训练类神经网络模型来表示策略。这里的“无模型”指的是不建立环境模型&#xff0c;而非不建立任何机器学习模型。这样的策略模型可以直接用策略梯度&#xff08;policy gradient&#xff09;[3]训练&#xff0c;但是策略梯度的变异性太…

使用extundelete恢复文件-尚文网络xUP楠哥

~~全文共1462字&#xff0c;阅读需约5分钟。 进Q群11372462&#xff0c;领取专属报名福利&#xff0c;包含云计算学习路线图代表性实战训练大厂云计算面试题资料! 假如遇到一些恶意者试图入侵服务器或者遇到Linux系统架构师不小心误删文件或目录&#xff0c;可以通过extundele…

DFS 、BFS、回溯

1、dfs(res,当前结构&#xff0c;当前候选热数据&#xff0c;当前目标值&#xff0c;当前搜索的层级&#xff09; 2、BFS&#xff08;Breadth first search&#xff09; 对于树来说&#xff0c;BFS就是层次遍历 而图的BFS 与树的BFS 不同点在于&#xff0c;树有根节点&#xf…

GPIO口,232串口,USB接口,485接口等接口保护电路

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录前言一、GPIO口1、输入端2、输出端二、USB口三、232口前言 送给大学毕业后找不到奋斗方向的你&#xff08;每周不定时更…

Ansible最佳实践之 AWX 启用facts缓存和模板问卷调查

写在前面 分享一些 AWX 启用facts缓存和模板问卷调查的笔记博文内容涉及&#xff1a; 启动facts缓存相关配置Demo启用模板调查来设置变量demo 食用方式&#xff1a; 需要了解 Ansible理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&a…

基础入门 - Spring Boot HelloWorld 第二节

简化配置 Spring Boot 把所有的配置都固定编写在 application.properties 里&#xff0c;文件名是固定写法&#xff0c;不能改 我们如果想更改配置&#xff0c;几乎所有的配置都在这里面更改就可以&#xff0c;而且&#xff0c;就算你不更改&#xff0c;不编写配置&#xff0c;…

计算机毕业设计java基于springboot医院急诊挂号系统

项目介绍 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue 人难免会有生病的时候&#xff0c;尤其是当一些突发情况下&#xff0c;一旦发生一些疾病很可能会危及生命。这时候如果按照常规的方式进行挂号是很浪费时间…

SwiftUI 中的水平条形图

水平条形图以矩形条的形式呈现数据类别,其宽度与它们所代表的数值成正比。本文展示了如何在垂直条形图的基础上创建一个水平柱状图。 水平条形图不是简单的垂直条形图的旋转。在 Numbers 等应用程序中,水平条形图被定义为独立的图表类型,而不是垂直条形图。除了条形差异外…

Jsp基础了解(一)

文章目录JSP1&#xff0c;JSP 概述2&#xff0c;JSP 快速入门2.1 搭建环境2.2 导入 JSP 依赖2.3 创建 jsp 页面2.4 编写代码2.5 测试3&#xff0c;JSP 原理4&#xff0c;JSP 脚本4.1 JSP 脚本分类4.2 案例4.2.1 需求4.2.2 实现4.2.3 成品代码4.2.4 测试4.3 JSP 缺点5&#xff0…

实验模拟TCP连接的各种异常情况(三次握手丢包,两端异常)

实验模拟TCP连接的各种异常情况&#xff08;三次握手丢包&#xff0c;两端异常&#xff09; 环境搭建 秋招结束&#xff0c;闲来无事&#xff0c;正好把计算机网络一些协议实验过一遍&#xff0c;于是用vmware搭建了一个两机通信的环境&#xff0c;在建立环境的过程中遇到了一…

HTTP Mime-Type对照表

HTTP Mime-Type对照表 : Content-Type&#xff08;Mime-Type&#xff09; 文件扩展名 小贴士&#xff1a;CtrlF 快速查找 Mime-Type类型 文件扩展名Content-Type(Mime-Type)文件扩展名Content-Type(Mime-Type).*&#xff08;二进制流&#xff0c;不知道下载文件类型&#xff09…

Java基础教程:多线程(4)-----线程的生命周期

任何对象都有生命周期&#xff0c;线程也不例外&#xff0c;它也有自己的生命周期。线程的整个生命周期分为六个阶段&#xff0c;分别是新建状态(New)、可运行状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、等待状态(Waiting)和死亡状态(Terminated)&#xff0c;线程…

1 基础知识

基础知识 1 汇编语言产生 1.1 机器指令 机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平&#xff0c;以使计算机的电子器件受到驱动&#xff0c;进行运算。 每一种微处理…

r语言绘制动态统计图:绘制世界各国的人均GDP,出生时的期望寿命和人口气泡图动画动态gif图

使用的数据 nations.csv 来自世界银行指标的数据。warming.csv 有关1880年至2017年全球年平均温度 。 yearvalue 全球平均温度&#xff0c;与1900-2000年的平均温度相比。 simulations.csv美国国家航空航天局&#xff08;NASA&#xff09;对历史温度的模拟数据&#xff0c;估计…

NetSuite Plug-In 101

进入了我的学术休假季&#xff0c;开始做一些自己喜欢的题目。今天就来扒一扒一个NetSuite落满灰尘的功能--Plug-In。 大家可能听到过一个叫做Email Approval的应用场景&#xff0c;可以让用户在不登录NetSuite系统的情况下&#xff0c;跟NetSuite产生交互。例如&#xff0c;通…

ArcGIS基础:字段的别名和字段属性域设置

【1】别名设置&#xff1a; 别名设置时需要注意的是在SHP格式里&#xff0c;进行设置仅仅是临时存贮&#xff0c;关闭属性表后&#xff0c;属性的别名就会丢失&#xff0c;需要将其存储到地理数据库里才可以永久包括。 存放在地理数据库后&#xff0c;找到数据&#xff0c;右…