- 博客(17)
- 收藏
- 关注
原创 算法第四周 H : 最长公共子序列
假如S1的最后一个元素 与 S2的最后一个元素不等(本例子就是属于这种情况),那么S1和S2的LCS就等于 : {S1减去最后一个元素} 与 S2 的LCS, {S2减去最后一个元素} 与 S1 的LCS 中的最大的那个序列。假如S1的最后一个元素 与 S2的最后一个元素相等,那么S1和S2的LCS就等于 {S1减去最后一个元素} 与 {S2减去最后一个元素} 的 LCS 再加上 S1和S2相等的最后一个元素。求两个序列的最每组测试样例都为一行,两组字符串,每组不超过1000,用空格隔开。
2023-04-20 16:54:03 189
原创 算法第四周 A : 数字三角形
到达dp[3][2]的路径有左右两条,为了使最终的结果最大,我们选择路径和最大的那一条,因为dp[2][1]=1+4=5,dp[2][2]=1+2=3,所以dp[3][2]=num[3][2]+max(dp[2][1],dp[2][2])=6+5=11。给出如下图的数字三角形,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?用一个二维数组dp[i][j]表示以第i行第j列的元素为终点的最大路径,比如。对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
2023-04-20 16:31:22 241
原创 算法第四周 F:最长上升子序列
Description给定一个数列,求最长上升子序列长度Input多组测试数据,每组数据给出1 ≤ n ≤ 103和1 ≤ b ≤ 104,表示n个数a1, a2, …, an.其中a1 = b,ai = (ai − 1+1)2mod(109+7), i > 1.Output最长上升子序列长度.Sample Input10 5Sample Output8Hint获得数组参考代码:a[1] = b;for(int i = 2; i
2023-04-20 11:08:29 289
原创 算法第三周:平面最近点对(分治算法)
平面最近点对(分治算法),给定 n 个平面上的点,求最近两个点的编号分治思想:将P平⾯划分为点个数⼤致相等的两个平⾯ 。把所有点按照x轴坐标升序排序,然后在正中间的位置画一条线,把点分成两个子集P1和P2,P1和P2分别位于线的左侧和右侧
2023-03-30 16:55:04 4932 1
原创 算法第三周 B : 幂运算(快速幂运算)
B : 幂运算给你三个整数a,b,p,求a^bmodp的值第一行是一个整数t,表示t组数据。接下来的n行,每行有3个整数,分别表示a, b, pt ≤ 2 * 105,a > 0, b > 0, p ≥ 2,
2023-03-29 23:42:25 237
原创 算法第三周 : 很大的数组的第k小(快速排序)
很大的数组的第k小,每组数据给出n m k表示有n个数,求第k小,数组的数字由以下规则得到:i = mimod (109+7), i = 1, 2, ..., n其中1 ≤ n, m ≤ 5 × 107,1 ≤ k ≤ n,数据保证得到的数组元素大部分互不相等。
2023-03-29 23:24:37 857
原创 算法分析:芯片测试问题(分治算法)
了,初始的想法的将这一堆芯片2个2个分为一组,每组测试一次,根据测试报告的结果,淘汰一部分芯片,剩下的芯片构成一个规模更小的子问题进行第二轮测试。测试方法的描述:将2⽚芯⽚(A和B)置于测试台上,互相进⾏测试,测试报告是“好”或“坏”,只取其⼀。好芯⽚的报告⼀定是正确的,坏芯⽚的报告是不确定的(可能会出错)。,现在的任务是通过测试从这一堆芯片中挑选出1片好芯片。为了能够用最少的测试次数找出好芯片,我们可以考虑用分治算法,不断缩小问题的规模。那么我们应该采取什么样的规则,使得每轮淘汰的坏芯片数目。
2023-03-27 19:41:52 847
原创 迷宫问题(DFS方法)
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。一个5 × 5的二维数组,表示一个迷宫。左上角到右下角的最短路径,格式如样例所示。
2023-03-22 16:44:33 725 1
原创 算法第二周 G : 二分查找
即数列中位置靠后的数一定大于或等于位置靠前的数。之后给出M次询问,每次询问包含一个数字Q。对于每次询问,求出数列中第一个大于或等于Q的数字的编号(数字在数列中的编号从1开始)+ 2行,每行一个数Q,表示要问数列中第一个大于或等于Q的元素的编号。行,每行1个自然数,即数列中第一个大于或等于Q的元素的编号。给出一串由N个自然数组成的非降数列。第一行有两个用空格隔开的自然数。≤ 1 × 106 第二行有。个用空格隔开的自然数。输入仅有一组数据,共。
2023-03-15 15:58:25 260
原创 算法第二周 F : 区间和
什么是前缀和:一个数组:a[1],a[2],a[3]…a[n],前缀和S[i]表示的是该数组的前i项的和,例如S[3] = a[1] + a[2] + a[3],S[i] = a[1] + a[2] + a[3] + …+ a[i - 1] + a[i].题目问题其实很简单,就是给你一个数组,左右下标L和R,求数组在区间[L,R]上的和,使用前缀和可以简化时间复杂度。,之后给出M次询问,每次询问包含两个数字L和R。对于每次询问,求出L和R之间所有数(包括L和R本身)之和。行,每行1个自然数,即数列中。
2023-03-15 11:17:00 158
原创 算法第二周 C : 数的计算
当n=6,满足条件的序列为{6},{1, 6},{2, 6},{1, 2, 6},{3, 6},{1, 3, 6}在6的左边,第一次添加的数字可以是1、2、3 (即1->n/2)则dp[6]=dp[1]+dp[2]+dp[3]+1,进而得到状态转移方程。将第一次添加的数字i以及后续的数字视为一组:dp[i]请问通过这样的规则,可以构造出多少个不同的序列。给定一个初始序列,序列中仅包含一个元素。1 个整数,表示能够生成的序列个数。当n=6,满足条件的序列为。如dp[1]包括:{dp[2] 包括:{
2023-03-15 11:09:10 101
原创 算法第二周 B : 台阶问题
有 N 级的台阶,你一开始在底部,每次可以向上迈最多 K 级台阶(最少 1 级),问到达第 N 级台阶有多少种不同方式。一个正整数,为不同方式数,由于答案可能很大,你需要输出 ans mod 100003 后的结果。它意味着爬到第 x 级台阶的方案数是爬到第 x−1,x - 2,....x−k 级台阶的方案数和。
2023-03-15 10:32:47 340
原创 数据结构与算法————无向图
数据结构与算法————无向图图的邻接表存储表示图的定义及分类图是由一组顶点和一组能够将两个顶点相连的边组成的我们需要定义三种结构、邻接表的构建步骤:①输入总顶点数,总边数②输入各顶点的值③输入各边所依附的两个顶点④构建新的边节点(使用头插法)
2023-03-04 01:08:17 5671
原创 算法设计与分析 H : 括号匹配
遇到左括号时全部压入栈,遇到右括号时,先判断该右括号和栈顶元素是不是一组匹配的括号,比如右括号是"(",则匹配的栈顶元素应该是")"字符串只会出现三种括号,“[]”,“()”,“{}”,且形如“({[]})”为合法,形如“[(])”为不合法。如果该字符串中出现的所有括号都合法,输出“Yes”,否则输出“No”。如果匹配的话,栈顶元素(左括号)出栈,右括号不做处理并读取下一个字符。给一个长度不大于100的字符串,问该字符串里出现的括号是否合法。当循环处理完毕之后,如果栈是空的,那么括号就是匹配的。
2023-03-03 09:52:33 182
原创 算法设计与分析 G : 排队援救
G : 排队援救 描述:突发重大灾难,n个人陷入困境,有一个救援点需要人们排队准备接受救援,假设每个人有一个名望值,进队规则如下:第一个人直接进队;当队里已经有人时,新来的人发现队尾的人的名望值比自己大或者相等,他会选择离开去其他救援点;队伍最多5人,如果一个人要进队时,发现队伍已满,而且他的名望值比队尾的人大,他会选择把队首的人挤掉而继续排在队尾。问最后得到救援的人分别是谁。输入单组数据。第一行为n(1 ≤ n ≤ 100),n为正整数。第二行为n个人的名望值,第i个去排队的人
2023-03-02 01:50:48 142
原创 算法设计与分析 E : 构造回文串
算法设计与分析 E : 构造回文串描述:给你一个整型(int)数N,可以将其看成字符串,是否有可能在N前加入若干个0(也可以不加),使得该字符串为回文串。
2023-03-01 18:44:39 237 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人