
算法题
文章平均质量分 50
本专栏以刷题为主,有些题目我觉得比较经典,便加入到其他专栏
navy.star
流水无情
展开
-
训练赛《眼不见,心不烦,理不乱》题解
计算f[i][j]前i个物品,背包承载量为j的最大价值。B.采药和c.点菜问题和简小胡的背包类似。原创 2022-07-17 21:08:09 · 399 阅读 · 5 评论 -
性感素数p
“性感素数 ”是指形如 (p,p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。现给定一个整数,请你判断其是否为一个性感素数。输入格式输入在一行中给出一个正整数 N。输出格式若 N 是一个性感素数,则在一行中输出 Yes,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。若 N 不是性感素数,则在一行中输出 No,然后在第二行输出大于 N 的最小性感素数。数据范围1≤N≤108(暴力枚举) O(n)O(n)没啥好说的原创 2022-06-14 23:06:41 · 224 阅读 · 0 评论 -
最长公共子序列
题目描述给出两个长度为 n 的整数序列,求它们的最长公共子序列(LCS)的长度,保证第一个序列中所有元素都不重复。注意:第一个序列中的所有元素均不重复。第二个序列中可能有重复元素。一个序列中的某些元素可能不在另一个序列中出现。输入格式第一行包含一个整数 n。接下来两行,每行包含 n 个整数,表示一个整数序列。输出格式输出一个整数,表示最长公共子序列的长度。数据范围1≤n≤106,序列内元素取值范围 [1,106]。原创 2022-03-02 18:08:54 · 149 阅读 · 0 评论 -
不同路径数
题目描述给定一个 n×m 的二维矩阵,其中的每个元素都是一个 [1,9] 之间的正整数。从矩阵中的任意位置出发,每次可以沿上下左右四个方向前进一步,走过的位置可以重复走。走了 k 次后,经过的元素会构成一个 (k+1) 位数。请求出一共可以走出多少个不同的 (k+1) 位数。输入格式第一行包含三个整数 n,m,k。接下来 n 行,每行包含 m 个空格隔开的整数,表示给定矩阵。输出格式输出一个整数,表示可以走出的不同 (k+1) 位数的个数。数据范围对于 30% 的数据,原创 2022-03-01 17:20:07 · 218 阅读 · 0 评论 -
序列最大收益
题目描述给定一个长度为 m 的整数序列 a1,a2,…,am。序列中每个元素的值 ai 均满足 1≤ai≤n。当一个值为 i 的元素和一个值为 j 的元素相邻时,可以产生的收益为 wi,j。现在,我们可以从序列中删除最多 k 个元素,删除一些元素后,原本不相邻的元素可能会变得相邻。序列的收益和为所有相邻元素对产生的收益之和,例如一个长度为 3 的整数序列 1,3,2 的收益和为 w1,3+w3,2。请问,通过利用删除操作,能够得到的序列的最大收益和是多少?输入格式第一行包含三个整原创 2022-02-28 09:32:21 · 136 阅读 · 0 评论 -
DP(二)装箱问题
题目描述有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入格式第一行是一个整数 V,表示箱子容量。第二行是一个整数 n,表示物品数。接下来 n 行,每行一个正整数(不超过10000),分别表示这 n 个物品的各自体积。输出格式一个整数,表示箱子剩余空间。数据范围0<V≤20000,0<n≤30原创 2022-02-26 10:37:09 · 1919 阅读 · 0 评论 -
摘花生(经典DP)*
题目描述Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hello Kitty只能向东或向南走,不能向西或向北走。问Hello Kitty最多能够摘到多少颗花生。输入格式第一行是一个整数T,代表一共有多少组数据。接下来是T组数据。每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。每组数据原创 2022-02-24 11:50:24 · 347 阅读 · 0 评论 -
训练赛二(元素分类,链表,字符串归并)
给定一个长度为 nn 的整数数组 a1,a2,…,an。现在,需要你对数组中的每个元素进行分类。每个元素要么划分至 b 类,要么划分至 c 类。我们设所有 b 类元素的相加之和为 sumb,所有 c 类元素的相加之和为 sumc。请你计算 sumb−sumc 的最大可能值。如果某类元素的个数为 0,则该类元素的相加之和视为 0。输入格式第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。输出格式输出一个整数,表示 sumb−sumc 的最大可能值。数原创 2022-02-20 09:40:33 · 573 阅读 · 0 评论 -
社交距离(奶牛感染)
题目描述由于高传染性的牛传染病 COWVID-19 的爆发,Farmer John 非常担忧他的奶牛们的健康。尽管他尽了最大努力使他的 N 头奶牛们践行“社交距离”,还是有许多奶牛不幸染上了疾病。编号为 1…N 的奶牛们分别位于一条长直道路上的不同位置(相当于一维数轴),奶牛 i 位于位置 xi。Farmer John 知道存在一个半径 R,任何与一头被感染的奶牛距离不超过 R 单位的奶牛也会被感染(然后会传染给与其距离 R 单位内的奶牛,以此类推)。不幸的是,Farmer John 并不原创 2022-02-15 23:00:51 · 1102 阅读 · 0 评论 -
奶牛排队拍照
农夫约翰在给他编号为 1…N 的 N 头奶牛排队拍照。约翰一开始计划从左向右数第 i 个位置排编号为 ai 的奶牛,他在一张纸上写下了排列 a1,a2,…,aN。不幸的是,这张纸刚刚被小偷偷走了!幸好约翰仍然有机会恢复他之前写下的排列。在这张纸被偷走之前,奶牛贝茜记录了序列 b1,b2,…,bN−1,对于每一个 1≤i<N 满足 bi=ai+ai+1。基于贝茜的信息,帮助约翰恢复可以产生序列 b 的“字典序最小”的排列 a。排列 x 字典序小于排列 y,如果对于某个 j,对于.原创 2022-02-13 23:31:42 · 1018 阅读 · 0 评论 -
截断数列(是否相等)
题目描述给定一个由 n 位数字组成的序列 a1a2…an。其中,每个数字都是 0∼9 之一。请你判断,能否将数列从中间截断为两个或更多个非空部分,要求每一部分的各位数字之和都相等。例如,350178 可以截断为 3 个部分 350、17、8,并且满足 3+5+0=1+7=8。输入格式第一行包含一个整数 n。第二行包含 n 个数字 a1,a2,…,an,数字之间不含空格。输出格式如果可以按要求截断数列,则输出 YES,否则输出 NO。数据范围前 6 个测试点满足 2≤n≤1原创 2022-02-12 23:29:06 · 1208 阅读 · 0 评论 -
两种操作(类似耍杂技的牛)
题目描述给定一个正整数 n,我们希望你可以通过一系列的操作,将其变为另一个正整数 m。操作共分两种:样例输入样例1:4 6输出样例1:2输入样例2:10 1输出样例2:9将当前的数乘以 2。将当前的数减去 1。要求,在变换过程中,数字始终为正。请你计算,所需要的最少操作次数。输入格式一行,两个不同的正整数 n 和 m。输出格式一个整数,表示所需的最少操作次数。数据范围前 6 个测试点满足 1≤n,m≤10。所有测试点满足 1≤n,m≤10000。原创 2022-02-12 23:11:04 · 673 阅读 · 0 评论 -
我在哪?从何处来,又到哪里去?
题目描述:农夫约翰出门沿着马路散步,但是他现在发现自己可能迷路了!沿路有一排共 N 个农场。不幸的是农场并没有编号,这使得约翰难以分辨他在这条路上所处的位置。然而,每个农场都沿路设有一个彩色的邮箱,所以约翰希望能够通过查看最近的几个邮箱的颜色来唯一确定他所在的位置。每个邮箱的颜色用 A..Z 之间的一个字母来指定,所以沿着道路的 N 个邮箱的序列可以用一个长为 N 的由字母 A..Z 组成的字符串来表示。某些邮箱可能会有相同的颜色。约翰想要知道最小的 K 的值,使得他查看任意连续原创 2022-02-11 23:10:33 · 782 阅读 · 0 评论 -
牛奶加工厂
牛奶生意正红红火火!农夫约翰的牛奶加工厂内有 N 个加工站,编号为 1…N,以及 N−1 条通道,每条连接某两个加工站。(通道建设很昂贵,所以约翰选择使用了最小数量的通道,使得从每个加工站出发都可以到达所有其他加工站)。为了创新和提升效率,约翰在每条通道上安装了传送带。不幸的是,当他意识到传送带是单向的已经太晚了,现在每条通道只能沿着一个方向通行了!所以现在的情况不再是从每个加工站出发都能够到达其他加工站了。然而,约翰认为事情可能还不算完全失败,只要至少还存在一个加工站 i 满足从其他每原创 2022-02-10 22:33:19 · 414 阅读 · 0 评论 -
困牛排序(贪心)
Farmer John 正在尝试将他的 N 头奶牛,方便起见编号为 1…N,在她们前往牧草地吃早餐之前排好顺序。当前,这些奶牛以 p1,p2,p3,…,pN 的顺序排成一行,Farmer John 站在奶牛 p1 前面。他想要重新排列这些奶牛,使得她们的顺序变为 1,2,3,…,N,奶牛 1 在 Farmer John 旁边。今天奶牛们有些困倦,所以任何时刻都只有直接面向 Farmer John 的奶牛会注意听 Farmer John 的指令。每一次他可以命令这头奶牛沿着队伍向后移动 k 步,k 可原创 2022-02-08 23:02:11 · 890 阅读 · 0 评论 -
桶列表(奶牛的安全感)
题目描述Farmer John 正在考虑改变他给奶牛挤奶的时候分配牛奶桶的方式。他认为这最终能使得他使用数量更少的桶,然而他不清楚具体是多少,请帮助他!Farmer John 有 N 头奶牛,方便起见编号为 1…N。第 i 头奶牛需要从时刻 si 到时刻 ti 之间挤奶,并且挤奶过程中需要用到 bi 个桶。多头奶牛可能在同一时刻都在挤奶;每个桶在每个时刻只能供一头奶牛使用。也就是说,第 i 头奶牛在时刻 si 到时刻 ti 之间挤奶时,如果用到了某个桶,则该桶在这段时间不能被其他奶牛.原创 2022-02-08 09:32:16 · 784 阅读 · 0 评论 -
石子合并问题
设有N堆石子排成一排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;如果第二步是先..原创 2022-02-06 15:41:16 · 1726 阅读 · 0 评论 -
判断无向图是否有且只有一个环的连通图
说实话,我以为这道题很简单,一看就知道用什么,可是在调试的时候疯了,都怪自己太菜了。要是能多想想就好了,每次都这样,非常不爽。好气????给定一个nn个点mm条边的无向图。点的编号从11到nn。图中不含重边和自环。请你对给定图进行判断,如果该图是一个有且仅有一个环的连通图,则输出YES,否则输出NO。输入格式第一行包含两个整数n,mn,m。接下来mm行,每行包含两个整数a,ba,b,表示点aa和点bb之间存在一条无向边。输出格式如果该图是一个有...原创 2022-01-29 22:01:17 · 1034 阅读 · 0 评论 -
最长上升子序列
题目描述给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数 N。第二行包含 N 个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,−10^9≤数列中的数≤10^9样例输入样例:73 1 2 1 8 5 6输出样例:4方法一:dp状态表示:f[i]表示从第一个数字开始算,以a[i]结尾的最大的上升序列。(以a[i]结尾的所有上升序列中属性为最大值的那一个)状态计算(集合划分):原创 2022-01-28 17:28:37 · 1105 阅读 · 0 评论 -
算法 二分检索
我们经常会遇到这样的问题,想要查询一个数据里有没有这个数,一般有几种方法。我总结了一下,有什么不对的,欢迎大佬指出!QAQ1.循环#include <iostream>using namespace std;int main(){ int q; cin>>q; int a[10]={0,1,2,3,4,5,6,7,8,9}; for(int i=0;i<10;i++) { if(a[i]==q) cout<<"t原创 2022-01-03 19:46:24 · 584 阅读 · 0 评论 -
求数组中最大和最小值
以下是我总结出来的,有任何问题,欢迎斧正!不多说,往下看QAQ.1.递归#include <iostream>#include <cmath>using namespace std;int max1(int a[], int len) { if (len == 0) { return a[0]; } else { return (a[len] > max1(a, len - 1) ? a[len] : max1(a, len - 1)); }}原创 2022-01-02 16:45:48 · 646 阅读 · 0 评论 -
算法 快速幂
快速幂原创 2021-12-27 09:54:28 · 525 阅读 · 0 评论 -
算法 DP 打卡
dp原创 2021-12-20 15:20:00 · 221 阅读 · 0 评论