![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计
文章平均质量分 60
『魔法猫咪』
魔法猫咪稳辣~
展开
-
C++:字符串哈希
给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1r1l2r2,请你判断l1r1和l2r2这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。原创 2023-08-18 20:05:08 · 407 阅读 · 0 评论 -
C++:哈希表——模拟散列表
维护一个集合,支持如下几种操作:1.“I x”,插入一个数x2.“Q x”,询问数x是否在集合中出现过现在要进行N次操作,对于每个询问操作输出对应的结果。原创 2023-08-15 18:23:45 · 373 阅读 · 0 评论 -
DFS:城堡问题(深度优先搜索入门问题)
城堡问题1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。输入城堡的行数和列数及表示每个方格四周墙的数字输出城堡的房间数、城堡中最大房间所包括的方块数输入样例4711 6 11 6 3 10 67 9 6 13 5 15 51 10 12 7 13 7 513 11 10 8 10 12 13输出样例59DFS(深度优先搜索)#include<iostream>using namespace std;int r原创 2021-01-25 18:48:37 · 577 阅读 · 0 评论 -
DFS:寻路问题(Roads)
POJ 1724 寻路问题(Roads)描述将由数字1到N标记的城市用单行道相连,每条道路都有两个相关参数:道路长度和需要为道路支付的通行费(用硬币的数量表示)。鲍勃和爱丽丝过去住在城市1里。在注意到爱丽丝在他们喜欢玩的纸牌游戏中作弊后,鲍勃和她分手了,并决定搬到N城市去。他想尽快赶到那里,但他手头没钱。我们想帮助Bob找到从城市1到城市N的最短路径,只要他有足够的钱。输入输入的第一行包含整数K, 0 <= K <= 10000, Bob在途中可以花费的最大硬币数。第二行包含整数N,原创 2021-01-27 19:05:12 · 1115 阅读 · 2 评论 -
BFS:抓住那头牛(广度优先搜索入门)
POJ 3278 抓住那头牛描述农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:从X移动到X-1或X+1,每次移动花费一分钟从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?输入两个整数,N和K输出一个整数,农夫抓到牛所要花费的最小分钟数样例输入5 17样例输出4#incl原创 2021-01-29 18:21:56 · 706 阅读 · 1 评论 -
DP:最长公共子序列
POJ 1458 最长公共子序列Description给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。Sample Inputabcfbc abfcabprogramming contestabcd mnpSample Output420AC代码#include <iostream>#include <string>using namespace std;原创 2021-01-31 19:45:09 · 130 阅读 · 0 评论 -
顺序栈:十进制数的D进制转换
十进制数的D进制转换编译器:VS2012#include<stdio.h>#define Stack_size 100typedef int Elemtype;typedef struct{ Elemtype elem[Stack_size]; int top;}Stack;void InitStack(Stack *S){ S->top = -1;}void Push(Stack *S,Elemtype x){ if(S->top == Stac原创 2021-04-01 15:50:01 · 382 阅读 · 0 评论 -
DP:Help Jimmy[记忆递归和递推]
POJ 1661 Help JimmyDescription“Help Jimmy” 是在下图所示的场景上完成的游戏:场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。设计一个程序,计算Jimmy原创 2021-02-01 18:52:22 · 140 阅读 · 1 评论 -
DP:数字三角形(动态规划入门)
POJ 1163 数字三角形Description在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。三角形的行数大于1小于等于100,数字为 0 - 99Input第一行输入输入数字三角形行数,之后输入数字三角形Output输出题目要求的最大的数字和Sample Input573 88 1 02 7 4 44 5 2 6 5Sample Output30A原创 2021-01-31 17:26:41 · 196 阅读 · 0 评论 -
C语言:顺序串基本操作
顺序串基本操作定长顺序串类型定义typedef struct{ char ch[MAXLEN]; int len;}SString;顺序串的初始化void InitString(SString *s){ gets_s(s->ch); s->len = strlen(s->ch);}顺序串插入操作int StrInsert(SString *s,int pos,SString t){ //在串s中下为pos的字符之前插入串t int i; //插入位置不原创 2021-04-11 17:11:20 · 1931 阅读 · 0 评论 -
算法设计:回溯法
回溯法1.算法概述回溯法的本质其实是基于递归函数的暴力搜索且递归函数可以解决无法写出nnn层for循环的暴力搜索方式2.算法思想平行+嵌套对应循环+递归若使用回溯法将问题抽象成一颗nnn叉树,则该树宽度由for循环进行遍历,该树深度由递归进行遍历3.通过回溯法能解决的问题排列问题,组合问题,子集问题,切割问题,棋盘问题4.回溯法模板void backtracking(参数) { if (终⽌条件) { 存放结果; return; } for (选择:本层集合中原创 2021-08-01 16:16:22 · 188 阅读 · 0 评论 -
排序:希尔排序
希尔排序直接插入排序 在正式开始学习希尔排序之前,我们可以先学习他的前身:直接插入排序直接插入排序算法的具体步骤:1.在插入第iii个数时,前i−1i-1i−1个数已经排好序2.将第iii个数与前i−1i-1i−1个数进行比较,从而找到插入位置并插入第iii个数3.将插入位置及其后的数依次向后移动直接插入排序代码(升序排序)/*将数组data[0]~data[n-1]中的n个整数升序排列*/void InsertSort(int data[], n) { for(int i = 1;原创 2022-04-04 21:13:24 · 922 阅读 · 0 评论 -
算法设计:冰雹猜想(角谷猜想)
冰雹猜想int hailstone(int n){//计算序列Hailstone(n)的长度 int length = 1;//从1开始按定义逐步地推并累计步数知道n=1 while(n > 1) { (n % 2) ? n = 3*n + 1:n /= 2; length++; } return length;//返回Hailstone(n)}原创 2021-01-19 20:55:08 · 611 阅读 · 0 评论 -
DFS:拯救少林神棍(Sticks)[四轮剪枝操作]
拯救少林神棍(Sticks)Description乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。Input输入包含多组数据,每组数据包括两行。第一行是一个不超过64的整数,表示砍断之后共有多少节木棍。第二行是截断以后,所得到的各节木棍的长度。在最后一组数据之后,是一个零。Outpu原创 2021-01-30 22:14:41 · 2343 阅读 · 6 评论 -
C语言:队列
队列顺序队列结构体中成员:1.data给出队列存储空间的起始地址2.front为队头指针,它指向队头元素3.rear为队尾指针,它指向下一个入队元素的存储位置4.max指明队列存储空间中最多可存储的数据元素个数。(通常为了区分队列空和满,会在队列尾留一个空数据单元,此时队列最多可放max-1个数据元素)特别说明:空间的开始地址为data,连续空间里的位置编号从data所指的开始位置起,到该空间的结束位置,编号依次是0,1,2,…,max-1。在图1的示例中max=6。下一个出队元素(这里是队原创 2021-05-11 15:27:37 · 957 阅读 · 0 评论 -
C++:模拟堆
维护一个集合,初始集合为空,支持如下几种操作:1.“I x”,插入一个数x2.“PM” ,输出当前集合中的最小值3.“DM”,删除当前集合中的最小值(当最小值不唯一时,删除最早插入的最小值)4.“D k”,删除第k个插入的数5.“C k x”,修改第k个插入的数,将其变为x现在要进行N次操作,对于所有的第2个操作,输出当前集合的最小值。原创 2023-08-12 20:55:16 · 307 阅读 · 0 评论 -
C++:Trie字符串统计
维护一个字符串集合,支持两种操作:1."I x"向集合中插入一个字符串x2."Q x"询问一个字符串在集合中出现了多少次共有N个操作,输入的字符串总长度不超过105,字符串仅包含小写英文字母。原创 2023-08-12 11:03:13 · 211 阅读 · 0 评论 -
C++:堆排序
输入一个长度为n的整数数列,从小到大输出前m小的数。原创 2023-08-10 17:25:34 · 205 阅读 · 0 评论 -
C++:N皇后
N皇后#include<iostream>#include<vector>using namespace std;class Solution{public: vector< vector<string> > result; void backTrack(int n, int row, vector<string>& chessboard) { if(row == n) {原创 2023-08-09 17:21:23 · 310 阅读 · 0 评论 -
C++:连通块中点的数量
给定一个包含n个点(编号为1~n)的无向图,初始时图中没有边现在要进行m个操作,操作共有3种1."C a b"在点a和点b之间连一条边,a和b可能相等2."Q1 a b"询问点a和点b是否在同一个连通块中,a和b可能相等3."Q2 a"询问点a所在连通块中点的数量。原创 2023-08-09 17:11:46 · 220 阅读 · 0 评论 -
C++:合并集合(并查集)
一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有2种:1.“M a b”,将编号为a和b的两个数的所在的集合合并,如果两个数已经在同一个集合中则忽略这个操作2.“Q a b”,询问编号为a和b的两个数是否在同一个集合中。原创 2023-08-08 21:02:25 · 593 阅读 · 0 评论 -
C++: kmp算法
给定一个模式串S以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。原创 2023-08-06 20:38:46 · 203 阅读 · 0 评论 -
C语言:贪心算法——事件安排
事件安排任务描述本关任务:小张最近很忙,记事本里有n件事情等待处理,每件事处理完毕后,能得到不同的奖励,而且都有一个截止日。一件事处理需要一整天时间,并且小张不能同时干其他事情。请你替小张安排一个事情处理的时间表,争取获得最大的奖励。相关知识为了完成本关任务,你需要掌握:贪心算法。编程要求根据提示,在右侧编辑器编写代码。测试说明平台会对你编写的代码进行测试:测试输入:第一行输入整数n,表示n个事情。随后输入n行,每行包括一个事情的截止日(不大于n)和处理收益。测试输出:输出最大的总收益原创 2021-10-30 19:16:55 · 959 阅读 · 0 评论 -
算法设计:字符串全排列(Educoder:打印字符串)
字符串全排列任务描述本关任务:输入一个小于26的数字n, 代表从字母a开始的一串长度为n的连续字符,如4表示abcd。 请输出这串字符的所有可能排列。相关知识为了完成本关任务,你需要掌握用循环或者递归的方法输出全排列。编程要求根据提示,在右侧编辑器补充一个函数int print(int n,char result[][27]),其中n是输入的字符数目,你需要生成全排列,并填写到result数组中。如果需要,你也可以自己在编辑器中添加子函数。测试说明平台会对你编写的代码进行测试:n=2时原创 2021-09-20 18:12:43 · 1026 阅读 · 0 评论 -
归纳递推:取物输赢问题
取物输赢问题 100个物品,两个玩家a,b轮流从这堆物品中取物,规定每次可以取的数目可以是1,3,4,6。最后一次取光者得胜。问为了获胜应该先取还是后取,应采取什么策略。思路分析采用表格填数法逐步分析:物品个数 iii123456先取输赢 f(i)f(i)f(i)101111表中0表示先取为输,1表示先取为赢如果想让先取为赢的话,玩家在还剩 iii 个物品时选择一个数目x(x=1,3,4,6)x(x = 1,3,4,6)x(x=1,3,4,6),使原创 2021-09-14 20:16:41 · 270 阅读 · 0 评论