![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
基础算法题
文章平均质量分 62
通过实践,将有收获的题目收录其中,希望能对大家有所帮助
小白小郑
不能模仿谁,只能做自己。
展开
-
基础算法题——放苹果(动态规划)
动态规划练习原创 2022-06-09 19:03:22 · 785 阅读 · 1 评论 -
基础算法题 —— 购物单 (0/1背包 变形)
根据题目我们可以知道主件和附件存在着一定的关系:若要拿附件就必须拿主件。如果将主件和附件分开来看,在考虑是否拿附件的时不便于确定主件最终结果是否被选中。更好的解题思路是将主件与附件作为一个整体,在考虑某主件是否被选的过程同时考虑该主件的附件是否被选。...原创 2022-06-08 10:54:32 · 252 阅读 · 0 评论 -
基础算法题 —— 合唱队(最长递增子序列)
①、枚举每个位置左右侧分别所能站的做多人自左向右递增:求每个位置左边最多可站多少人(含自己)— dp1自右向左递增:求每个位置右边最多可站多少人(含自己)— dp2②、选择第 i 个位置不移动的情况下,合唱队所能站的人数:dp1[i]+dp2[i]-1合唱队最多人:Max_ = dp1[i]+dp2[i]-1③、组成合唱队移除最少人:n - Max_...原创 2022-06-05 21:52:28 · 496 阅读 · 0 评论 -
基础算法题——Radio Transmission(KMP-next 妙用)
Radio Transmission解题思路在KMP算法中 next[l] 记录的就是字符串最长的相同的前缀与后缀,也就是说在题目字符串中有一段字符串是重复出现的,那么减去重复出现的字符串以后,剩下的就是这个字符串最小的循环节。比较字符串的 next 数组下标012345678910s1cabcabcabcanext-10001234567s2bcdabcdabcdnext原创 2020-11-09 19:43:23 · 308 阅读 · 0 评论 -
基础算法题——最短路计数(bfs遍历)
最短路计数题目描述给出一个N个顶点M条边的无向无权图,顶点编号为 1-N 。问从顶点1开始,到其他每个点的最短路有几条。输入格式第一行包含2个正整数 N, M,为图的顶点数与边数。接下来M行,每行2个正整数 x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。输出格式共 N 行,每行一个非负整数,第ii行输出从顶点 1 到顶点 i 有多少条不同的最短路,由于答案有可能会很大,你只需要输出 ans mod 100003 后的结果即可。如果无法到达顶点 i 则输出0。输入输出样例原创 2020-11-09 14:04:34 · 440 阅读 · 0 评论 -
基础算法题——#109. 并查集(字符串与并查集、快读)
#109. 并查集又是一道并查集基础基础题~#include<bits/stdc++.h>#define ll long longusing namespace std;const int mod=998244353;int u[4000010], n, m;ll ans=0;void read(int &n){ char c='+'; n=0; //读去无意义的字符 while(c<'0'||c>'9') c=getc原创 2020-11-09 10:52:22 · 143 阅读 · 0 评论 -
基础算法题——树状数组 1 :单点修改,区间查询
树状数组复习基础!!#include<bits/stdc++.h>#define ll long longusing namespace std;ll c[1000010], n, q;ll lowbit(ll x){ return x&(-x);}void updata(ll x, ll v){ for(ll k=x; k<=n; k+=lowbit(k)) c[k] += v;}ll getSum(ll x){ ll sum=0; f原创 2020-11-08 14:25:28 · 143 阅读 · 0 评论 -
基础算法题——家庭作业(并查集的标记法、贪心)
家庭作业题目描述输入格式第一行一个整数n ,表示作业的数量;接下来 n行,每行包括两个整数,第一个整数表示作业的完成期限,第二个数表示该作业的学分。输出格式输出一个整数表示可以获得的最大学分。保证答案不超过 C/C++ 的 int 范围输入输出样例输入 #171 61 73 23 12 42 56 1输出 #115说明/提示思路一(有漏洞)以第一关键字学分、第二关键字时间对 n 个作业进行排序。从头开始遍历 n 个元素,用 now 记录当前时间,如果 now原创 2020-11-08 10:38:04 · 636 阅读 · 0 评论 -
万万没想到 之 二分法 (Best Cow Fences、讲得就很透彻,就很舒服)
Best Cow Fences题意:给定一个正整数数列A , 求一个平均数最大,长度不小于 L 的字段。(想不到这种题目也可以用二分来解答,菜是原罪哎)方法一:枚举暴力法#include<bits/stdc++.h>using namespace std;int sum[100010];int main(){ int n, l; memset(sum, 0, sizeof(sum)); scanf("%d%d", &n, &l); for(int i=1;原创 2020-11-07 23:33:44 · 621 阅读 · 0 评论 -
基础算法题——炎炎消防队(取巧、三分)
炎炎夏日题目描述夏天的重庆格外地炎热,很容易起火。消防士们都全副武装,一旦发生险情就立马赶往救火。森罗是消防队中的一员,他在灭火的过程中突发奇想,如果能用退火的原理求解函数求最小值,那不就可以很容易计算了吗?翌日,森罗来到即将高考的弟弟家辅导功课,其中一道题目是这样的函数F(x) = F(x) = 7 * x7 + 6 * x6 + 2 * x3 + 8 * x2 - y * x给定任意一个实数y,让你求出函数的最小值。森罗回想起昨天的突发奇想,很快就给出了这个题目的解。那么,你知道他是怎么解决原创 2020-11-06 13:21:48 · 579 阅读 · 0 评论 -
基础算法题——天梯赛座位分配(化繁为简)
天梯赛座位分配天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位原创 2020-11-04 13:01:32 · 1980 阅读 · 0 评论 -
基础算法题——younik吃大餐(多重背包)
younik吃大餐题目描述Younik的检查结果出来了,核酸检测为阴性,她非常高兴,立刻决定去饭店大吃一顿。到了饭店,Younik看到琳琅满目的菜单,开始犯了选择困难症。这时作为顶级吃货的你恰好坐到了Younik的旁桌,你决定发扬一下雷锋精神,帮助Younik决定吃哪些菜。假设每一道菜都有相应的快乐值,Younik每吃一道菜就会获得相应的快乐值,这里有N道菜,每道菜可以吃多次,但是同一道菜每重复吃一次,得到的快乐值会比原来的快乐值少 2^(k-1) 点(k为重复吃的次数,第一次重复,得到的快乐值会比这原创 2020-11-03 15:55:54 · 162 阅读 · 0 评论 -
基础算法题——德邦国王(dfs、剪枝)
德邦国王题目还算中规中矩,就是剪枝比较麻烦。解题思路:dfs剪枝:①、移动次数不超过设定值 M。②、若有解,则后面的步骤不可大于该解的值。③、不断查询完美矩阵与当前矩阵不同的个数 t 。t - 1 为最快可将当前矩阵移动成完美矩阵的步数,若 t - 1 + 已经移动的步数 cnt 大于 最优解时,则该情况不必再往下移动。AC代码#include<bits/stdc++.h>using namespace std;int now[10][10], per[10][1原创 2020-10-29 20:01:09 · 399 阅读 · 0 评论 -
基础算法题——保卫家园(multiset、维护)
保卫家园题目链接解题思路1、将结构体数组 num 存储数据并按 s 的值从小到大排序。struct node{ int s, t;}num[1000010];bool cmp(node a, node b){ return a.s<b.s;}sort(num, num+n, cmp);2、 multiset 容器利用 multiset 容器 dw 对已入伍的队员退伍时间进行从小到大的维护。由于队伍一定可以入伍 k 个队员,初始化已入队人数 cnt = k 并将已原创 2020-10-11 22:00:08 · 170 阅读 · 0 评论 -
基础算法题——乐团派对(如何找到最多乐队数量)
乐团派对解题思路①、排序并存储。将乐队的能力值从高到底排序,存储在 arr 数组中。②、判断是否每一位乐手都能加入乐队。我们需要保证每个乐手能被分进同一个乐队,那么就判断将能力值最高的乐手是否小于或等于乐手总人数( arr[n-1] 与 n )。若小于或等于,那么乐队数量为1并进入③,否则直接输出 -1 便退出程序。③、寻找最大的乐队数量。在区间 arr[0] ~ n - arr[n-1]-1 上组建新的乐队。每能组建一支队伍则乐队数量加1。④、得到最大乐队数。最终遍历完 arr[0]原创 2020-10-04 16:22:24 · 207 阅读 · 0 评论 -
基础算法题——迷宫(递推)
迷宫解题思路①、暴力法利用 dfs 遍历每一条可能的路径,将遍历的权值和不断取余。不足:当 n、m 取较大的情况下,所遍历的路径可能会暴增,出现超时的情况。②、递推法从题目上我们可以发现,最终的权值和是要对 mod 取余的,利用这个特点,我们可以实现递推。状态转移方程:dp[i][j][k] | = dp[i-1][j][(k-mg[i][j]+mod)%mod];dp[i][j][k] | = dp[i][j-1][(k-mg[i][j]+mod)%mod];原理:在迷宫上,假原创 2020-10-02 15:47:02 · 254 阅读 · 0 评论 -
基础算法题——单词记忆方法(栈)
单词记忆方法题目链接对于这些左右括号的问题,很直接能够想到用栈来解决。解题思路①、s[i] == ‘(’:应当压入 stk 一个新元素if(s[i]=='('){ stk[++tp]=0;}②、s[i] >= ‘A’ && s[i] <= ‘Z’:如果当前下标 i 是字符,毫无疑问,我们要将其加入到栈中。同时,因为其后可能跟着数字,所以从 i + 1 开始求出其后的数字,与字符对应的数值相乘。else if(s[i]>='A'&&原创 2020-10-01 10:10:26 · 131 阅读 · 0 评论 -
基础算法题——位运算之谜(数论)
位运算之谜题目链接数论:a + b = a xor b + 2 ∗ (a & b)变式可得:a xor b = a + b - 2 * (a & b)另外还要排除两种不能被组成的情况:①、( a+b - 2*(a & b) ) < 0。a xor b最小为0,不存在小于0的值。②、(a & b) & ( a+b - 2*(a & b) ) > 0。a&b 与 a xor b 一定是取反的,不存在相同的位。如果满足上面两个原创 2020-09-27 20:20:28 · 448 阅读 · 0 评论 -
基础算法题——牛牛和牛可乐的赌约2(题意混淆)
牛牛和牛可乐的赌约2题目链接牛牛感觉在上一次赌约中,情况对于自己非常不利,所以决定再赌一场。这时候,牛蜓队长出现了:第一,绝对不意气用事;第二,绝对不漏判任何一件坏事;第三,绝对裁判的公正漂亮。牛蜓队长带他们来到了一个棋盘游戏,棋盘左上角是(0,0)(0,0),这个棋盘在(x,y)(x,y)的位置有一个棋子,牛牛和牛可乐轮流移动这个棋子,这个棋子可以左移也可以上移,可以移动一格或者两格,直到不能再移动(即到(0,0)(0,0))的那个人算输。如果原本在(x,y)(x,y),左移一格即为(x,y -原创 2020-09-27 17:42:54 · 317 阅读 · 0 评论 -
牛客题集——Cook Steak(警示 理解题意)
Cook Steak题目链接题目译文:对于烤牛排,ZJH认为它需要N道烧烤工序,每道工序都在一个温度范围内[li,ri]就一分钟而言,只有在这种情况下,烤牛排才是最好的。幸运的是,厨房里的设备已经配备了人工智能,可以在最短的时间内快速完成整个过程。该装置的温度每分钟可升高或降低一度。当温度在规定的温度范围内时,牛排将被烤一分钟。然而,现在的问题是,ZJH在改造自动厨房系统时,忘记编写一个计算牛排完成时间的程序,因此要求您将此程序添加到系统中。给定一个整数N,表示进程数,以及N对数[li,ri],表原创 2020-09-27 08:25:59 · 406 阅读 · 0 评论 -
基础算法题——虫洞(简单版、vector)
虫洞(简单)题目链接解题步骤:①、求出第 i 个星球作为中心子星系时,f[i] 的大小。②、对每个 i 与 n - f[i] 异或后的结果相加,再对998244353取模即可得到答案。问题关键点求第 i 个星球 f[i] 的大小个人解题思路:暴力①、利用两个 vector 数组存储每个星球被哪些星球环绕的信息、将第 i 个星球看作第一类星球时,所有不同类型星球数。vector <int> g[1010]; //记录路径vector <int> v[101原创 2020-09-20 21:09:31 · 580 阅读 · 0 评论 -
POJ 3414 Pots(bfs、简单但繁琐)
POJ 3414 PotsDescriptionYou are given two pots, having the volume of A and B liters respectively. The following operations can be performed:1.FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap;2.DROP(i) empty the pot i to the drain;3.POUR(i,j原创 2020-09-10 23:35:31 · 113 阅读 · 0 评论 -
POJ 3279 Fliptile(二进制枚举、递推、POJ 1426 Find The Multiple、详解)
POJ 3279 Fliptile测试平台Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activity for cows in which they manipulate an M × N grid (1 ≤ M ≤ 15; 1 ≤ N ≤ 15) of square tiles, each of which原创 2020-09-08 19:14:58 · 125 阅读 · 0 评论 -
洛谷题集——银行贷款(暴力枚举与二分查找)
银行贷款题目链接当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。输入格式三个用空格隔开的正整数。第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。输出格式一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到0.1%。输入输出样例输入1000 100 12输出2.9计算公式月还款额=本金 * 月利率 * (1+月利率)n/[(1+原创 2020-08-24 00:12:30 · 707 阅读 · 0 评论 -
疯狂的采药(完全背包例题详解)
题目每种草药可以无限制地采摘,每种草药对应采药时间、草药价值,求在一定的采药时间下,采出的药最大总价值是多少。输入格式输入第一行有两个整数,分别代表总共能够用来采药的时间 t 和代表山洞里的草药的数目 m。第 2 到第(m+1)行,每行两个整数,第(i + 1) 行的整数 ai,bi分别表示采摘第 i 种草药的时间和该草药的价值。输出格式输出一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。输入输出样例输入70 371 10069 11 2输出140说原创 2020-08-13 16:57:35 · 853 阅读 · 0 评论 -
基础算法题——HDU6092 子集问题(0/1背包+思维)
题目题目链接给定n,m和数组b0 ~ bm (m+1个数),求出一个正数集合A:a1 ~ an,满足:集合 A 中每个子集的和为 i 的个数为 bi,并输出字典序最小的A。(n <= 50, m<=104, bi<=2n)输入:第一行包含一个数字,即测试用例的数量T。对于每个测试用例,第一行包含两个数字n,m。第二行包含数字为数组 b 。输出:对于每个测试用例,用数字打印一行。保证至少有一个解决方案。如果有不同的解决方案,打印字典序最小的一个为数组 a 。样例输入22原创 2020-07-23 09:35:41 · 136 阅读 · 0 评论 -
基础算法题——画树(卡特兰数)
卡特兰数简介卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613原创 2020-07-21 23:12:38 · 371 阅读 · 0 评论 -
基础算法题——Classical String Problem(字符环)
Classical String Problem题意:给定字符串S由小写字母组成。执行Q次操作。每个操作都可以是以下两种类型之一:(M)修改:给定一个整数x。您需要根据x的值修改S。如果x是正的,则将 S 字符串中左边的 x 个字母移动到S字符串的右侧;否则,将 S 字符串中右边的 x 字母移到S字符串的左侧。(A)询问:给定一个正整数x。查询当前字符串S中的第x个字母是什么。提示:2 ≤ ∣S∣ ≤ 2×1061 ≤ Q ≤ 8×105当操作为M时, 1 ≤ ∣x∣ < ∣S∣原创 2020-07-18 23:09:49 · 524 阅读 · 0 评论 -
基础算法题——修复公路(并查集、kruskal)
题目背景A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。题目描述给出A地区的村庄数N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)输入格式第1行两个正整数N,M下面M行,每行 3 个正整数x, y, t,告诉你这条公路连着x,y两个村庄,在时间t时能修复完成这条公路。输出格式如果全部公路修复完原创 2020-07-16 23:55:06 · 761 阅读 · 0 评论 -
基础算法题——牌面种类(DFS回溯、思维)
牌面种类小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。题目分析从题目中可知,52张牌中,有13种类型的牌,每种类型的牌有4张。我们要从5...原创 2020-04-01 15:39:16 · 273 阅读 · 0 评论 -
基础算法题——地宫取宝(深搜、剪枝)
地宫取宝问题描述 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送...原创 2020-03-28 15:22:12 · 285 阅读 · 0 评论 -
牛客网题集——张经理的员工(数学逻辑思维)
张经理的员工张经理的公司的办公室长达100000米,从最左端开始每间隔1米都有一个工位(从第1米开始有工位),位于第i米的工位称为i号工位,且这些工位都在一条水平线上。他有n个员工,每个员工分别位于xi号工位上(不同员工可能位于同一个工位)。现在张经理想把员工聚集在某两个工位上,他有q套方案(每套方案包含两个工位号,两个工位号可能相同),他想知道对于每套方案,所有员工都到达两个工位中的某一个所...原创 2020-05-02 17:58:36 · 295 阅读 · 0 评论 -
基础算法题——复数计算(蓝桥杯算法训练 P1103)
复数计算题目( P1103)编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为:要求:(1)定义一个结构体类型来描述复数。 (2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。 (3)必须使用结构体指针的方法把函数的计算结果返回。 说明:用户输入:运算符号(+,-,*,/) a b c d. 输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,...原创 2020-03-19 19:02:18 · 679 阅读 · 0 评论 -
基础算法题——nico和niconiconi(动态规划)
nico和niconiconi(动态规划)前言本人为一名普通二本学校自动化专业的大二学生,对编程有着少许兴趣。动态规划有时候真的挺摸不着头绪的,希望这道题能加深我们对动态规划的理解。题目牛客网题目链接考查重点①、列出状态转换方程②、判断特殊情况题目分析题中要求的是最大计数分数。在同一个字符串中可能会出现不同的计分情况,我们要如何保证当前的计分是最大的计分分数呢?计 dp[i...原创 2020-03-11 16:13:16 · 713 阅读 · 0 评论 -
洛谷题集——最大食物链计数(动态规划、图的基本应用、BFS)
题目给你一个食物网,你要求出这个食物网中最大食物链的数量。(这里的“最大食物链”,指的是生物学意义上的食物链,即最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者。)Delia 非常急,所以你只有 1 秒的时间。由于这个结果可能过大,你只需要输出总数模上 80112002的结果。输入格式第一行,两个正整数n、m,表示生物种类 n 和吃与被吃的关系数 m。接下来 m 行,每行两个正整数,表示被吃的生物A和吃A的生物B。输出格式一行一个整数,为最大食物链数量模上 801120原创 2020-06-30 09:19:06 · 420 阅读 · 0 评论 -
洛谷题集——单源最短路径(弱化版、spfa+邻接表)
题目给出一个有向图,请输出从某一点出发到所有点的最短路径长度。输入格式第一行包含三个整数 n , m , s 分别表示点的个数、有向边的个数、出发点的编号。接下来 m 行每行包含三个整数 u , v , w 表示一条u→v 的,长度为 w 的边。输出格式输出一行 n 个整数,第 i 个表示 s 到第 i 个点的最短路径,若不能到达则输出 231-1输入输出样例输入4 6 11 2 22 3 22 4 11 3 53 4 31 4 4输出0 2 4 3洛谷测试平台S原创 2020-06-29 21:11:32 · 324 阅读 · 0 评论 -
牛客网题集——Min Value(逻辑)
Min Value牛客网测试平台题意:一个由 N 个数组成的序列 a1,a2,a3,······,an-1,an,从中任选两个数 ai 和 aj,使得 ai + aj 的绝对值最小,并且计算出 i + j 的值,其中 i ≠ j。输入描述:输入第一行包含一个正整数 N (2 ≤ N ≤ 100000)接下来 N 行,每行一个整数 ai (1 ≤ i ≤ N,-106 ≤ ai ≤ 106)输出描述:输出两个数,中间用空格分开,ai + aj 的绝对值的最小值和 i + j(如果有多组 i 和原创 2020-06-15 21:29:48 · 602 阅读 · 0 评论 -
洛谷题集——妖梦拼木棒(数组与map运行效率)
假如我们将map作为数组来使用,我们会发现他们的运行效率截然不同!原创 2020-06-04 15:01:33 · 428 阅读 · 0 评论 -
单向循环链表(如何实现约瑟夫环)
约瑟夫问题:总共有n个人排成一圈,从某个人开始,按顺时针方向依次编号。从编号为1的人开始顺时针报数1(下一个报号2),报到m的人退出圈子然后重新从1开始顺时针报数。这样不断循环下去,圈子里的人将不断减少。要求全部人员输出退出顺序。#include<stdio.h>#include<stdlib.h> struct Node{ int num; Node *next;};int main(){ int len, a=2; Node *end, *r; end =原创 2020-05-27 18:00:39 · 476 阅读 · 0 评论 -
基础算法题——小朋友排队(树状数组)
小朋友排队问题描述 n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。请问,要让所...原创 2020-03-31 10:50:14 · 1652 阅读 · 0 评论