自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 算法分析与设计第五章例题

5.2 装载问题:1递归迭代回溯:#include <iostream>#include <bits/stdc++.h>#include <queue>#include <stack>#include <string>#include <math.h>#define inf 0x3f3f3f3f#define maxn 200050using namespace std;// 5.2 装载问题int best_w

2021-11-18 23:31:39 567

原创 B - 最少硬币问题

#include <iostream>#include <bits/stdc++.h>#include <queue>#include <stack>#include <string>#define inf 9999using namespace std;//B - 最少硬币问题int t[11];int coins[11];int dp[11][2001];int main(){ int n,m; cin&

2021-11-14 15:21:03 212 1

原创 算法设计与分析——贪心算法部分例题

测试数据:输入:5a 12b 40c 15d 8 e 2511010011102输出: a 1111 b 0 c 110 d 1110 e 10 cebd参考代码:#include <iostream>#include <bits/stdc++.h>#include <que

2021-10-31 15:37:37 349

原创 算法设计与分析第三章习题(1-10)参考代码

3-1 独立任务最优调度问题问题描述:独立任务最优调度,又称双机调度问题:用两台处理机A和B处理n个作业。设第i个作业交给机器A处理时所需要的时间是a[i],若由机器B来处理,则所需要的时间是b[i]。现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业。设计一个动态规划算法,使得这两台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。研究一个实例:n=6, a = {2, 5, 7, 10, 5, 2}, b = {3, 8, 4, 11, 3, 4}.

2021-10-26 14:42:42 471

原创 D - 石子合并问题

D - 石子合并问题Description在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。对于给定n堆石子,计算合并成一堆的最小得分和最大得分。Input输入数据的第1行是正整数n,1≤n≤100,表示有n堆石子。第二行有n个数,分别表示每堆石子的个数。Output输出数据有两行,第1行中的数是最小得分,第2行中的数是最大得分。

2021-10-11 14:07:00 143

原创 A - 高数Umaru系列(9)——哈士奇(01背包问题)

Description由于高数巨养的喵星人太傲娇了,要天天吃新鲜猫粮而且还经常欺负高数巨,所以高数巨决定买几条哈士奇尝尝鲜。这天高数巨来到了二手狗市场买哈士奇,高数巨看完了所有的哈士奇,记下了每条哈士奇的价格,并根据对它们的好感程度给它们每只都赋予了一个萌值。高数现在手里有X元,她想通过购买若干条哈士奇来获得尽可能多的萌值。现在给定高数巨手里的钱X以及N条哈士奇的价格和萌值,求高数巨最多可获得多少萌值Input多组输入。对于每组输入,第一行有两个整数N,X(1 < = N < = 100

2021-10-09 21:56:31 102

原创 算法设计与分析第二章习题参考代码

2-5: 有重复元素的排列问题:参考代码:#include <iostream>#include <bits/stdc++.h>#include <queue>#include <stack>#include <string>using namespace std;//有重复问题的排列问题int n;char a[101];void Swap(int x,int y){ char t; t=a[x];

2021-10-09 21:51:01 318

原创 马的Hamilton周游路线问题

马的Hamilton周游路线问题divied()函数 写结束条件时,一开始只考虑了是total = m*n, 此时也应判断一下它的下一步是否回到了起始点。 且由于结果不唯一,我们只需得到一种,所以在结束的时候,应及时退出系统。不然数据量大时,很容易爆掉。参考代码:#include <iostream>#include <bits/stdc++.h>#include <queue>#include <stack>using n...

2021-09-27 13:07:01 367

原创 棋盘覆盖问题

棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖。建立模型如图:解题思路:采用分治算法的思想。将2k*2k的棋盘分割成4个2 k-1 * 2 k-1 大小的区间。如图2-6(a)所示。 黑方块必然在这切割好的区间的其中一个中,便可将L型骨牌放在其余三个区间的汇合处即如图2-6(b)所示。参考代码:#include <iostream>#include <bits/stdc++.h>#inclu

2021-09-25 22:47:40 240

原创 金币阵列问题

问题描述:有mxn(m<=100,n<=100)枚金币在桌面上排成一个m行n列的金币阵列。每一枚金币或正面朝上,或背面朝上。用数字表示金币状态,0表示正面朝上,1表示金币背面朝上。金币游戏的规则是:(1)每次可将任一行金币翻过来放在原来的位置上(2)每次可任选2列,变换着2列金币的位置算法设计:给定金币阵列的初始状态和目标状态,计算按金币游戏规则,将金币阵列从初始状态变换到目标状态所需的最少变换次数解题思路:1 由题目所给的条件可知,我们可采用先把任意一列放到第一列,通过0次或多次

2021-09-19 00:02:31 451

原创 字符串折叠、涂色问题

链接:https://ac.nowcoder.com/acm/problem/20238一:字符串折叠题目描述折叠的定义如下:一个字符串可以看成它自身的折叠。记作S = SX(S)是X(X>1)个S连接在一起的串的折叠。记作X(S) = SSSS…S(X个S)。如果A = A’, B = B’,则AB = A’B’ 例如,因为3(A) = AAA, 2(B) = BB,所以3(A)C2(B) = AAACBB,而2(3(A)C)2(B) = AAACAAACBB给一个字符串,求它的最短折

2021-09-18 14:36:06 323

原创 最长回文子序列和最长回文子串

1.最长回文序列问题给一个字符串,求一个最长的回文子序列(不要求连续)。思路:dp[i][j]代表从i 到 j 的序列的最长回文串的大小。当 i == j 时 即dp[i][i] = 1。即为对二维数组dp的初始化。对于任意一段(i,j)的序列,如果ch[i] == ch [j] ,那么最长回文串的大小 = dp[ i+1][ j-1] +2; 若是不相等,则取max(dp[i][j-1],dp[i+1][j])。 而且由递推公式可知,我们求解过程应是斜着求值,例如先求dp[1][2],dp[2]

2021-09-13 21:36:34 112

原创 递归函数及例题

定义:一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例如连加、连乘及阶乘等。凡是递归的函数,都是可计算的,即能行的 。古典递归函数,是一种定义在自然数集合上的函数,它的未知值往往要通过有限次运算回归到已知值来求出,故称为“递归”。它是古典递归函数论的研究对象 。条件:1 递归出口即结束条件;2 递推关系;例题1:求任意正整数的逆置数示例1:输入:890输出解题思路:1 递归出口: n=0时可结束2 递推关系: 使用变量

2021-09-11 17:33:08 6431

原创 整数划分问题

问题描述:整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:n=m1+m2+...+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,...,mi}为n的一个划分。正整数6有如下11种不同的划分,所以P(6)=11。65+14+2, 4+1+13+3, 3+2+1, 3+1+1+12+2+2, 2+2+1+1, 2+1+1+1+11+1+1+1+1+1思路:由于只用

2021-09-10 22:30:08 393

原创 汉诺塔—递归

#include <iostream>#include <bits/stdc++.h>#include <string>using namespace std;//汉诺塔问题int step=0;void move_(int n,char a,char b,char c){ if(n == 1) { step++; cout<<"move 1# from "<<a<<

2021-09-10 20:33:25 252

原创 全排列问题

全排列问题:对于给定的集合A{a1,a2,…,an},其中的n个元素互不相同,如何输出这n个元素的所有排列(全排列)。解题思路 1:递归方式求解以元素(1,2,3)为例。当index=1,

2021-09-09 21:49:44 338

原创 动态规划——例题

动态规划解题思路:总共分为四步:1 建立一个新的一维数组或二维数组,根据题意即给出的变量来决定建立的数组类型。2若是一维数组,确定数组第一个元素的取值。若是二维数组,则确定数组第一行和第一列的值。3找出状态转换方程式。4返回结果。例题1:求最大不连续子序列设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<…<akm。求

2021-09-07 22:14:43 189

原创 单词接龙(暴搜)

链接:https://ac.nowcoder.com/acm/problem/16752来源:牛客网题目描述单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。输入描述:输入的第一行为一个单独的整数n(n

2021-09-04 20:10:51 195

原创 NOIP2012]文化之旅——(搜索题)

链接:https://ac.nowcoder.com/acm/problem/16577来源:牛客网题目描述有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。不同的国家可能有相同的文化。不同文化的国家对其他文化的看法不同,有些文化会排斥外来文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家)。现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这位使者游历的起点

2021-07-03 09:54:59 242

原创 子矩阵——(搜索类,深搜)

#include <iostream>#include <bits/stdc++.h>using namespace std;const int maxn=20; const int INF=2147483647; int yy[maxn][maxn]; int n,m,r,c,ans; int vish[maxn],hc[maxn][maxn],lc[maxn],f[maxn][maxn];void Init(){ for(int i=1;i&

2021-06-29 15:38:00 559

原创 [NOIP2017]棋盘——(搜索类)

链接:https://ac.nowcoder.com/acm/problem/16423来源:牛客网题目描述有一个m × m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的),你只能向上、下、左、右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费 1 个金币。另外,你可以花费 2 个金币施展魔法让下一个无色格子暂时变为你指定的

2021-06-28 23:22:36 411

原创 围棋——(数组,哈希)

链接:https://ac.nowcoder.com/acm/problem/13225来源:牛客网题目描述围棋是起源于中国有悠久历史的策略性棋类游戏。它的规则如下:棋盘19*19。棋子分黑白两色,双方各执一色。下法:每次黑或白着一子于棋盘的空点上。棋子下定后,不再向其他点移动。棋子的气:一个棋子在棋盘上,与它相邻的空点是这个棋子的“气”(这里相邻是指两个点有公共边)。 相邻的点上如果有同色棋子存在,这些棋子就相互连接成一个不可分割的整体,气合并计算。相邻的点上如果有异色棋子存在,此处的气

2021-06-27 17:09:15 483

原创 [NOIP2018]对称二叉树——(哈希,二叉树)

题目描述一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树:二叉树;将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。下图中节点内的数字为权值,节点外的 id 表示节点编号。现在给出一棵二叉树,希望你找出它的一棵子树,该子树为对称二叉树,且节点数 最多。请输出这棵子树的节点数。注意:只有树根的树也是对称二叉树。本题中约定,以节点 T为子树根的一棵“子树”指的是:节点T和它的全部后代节点构成的二叉树。本题约定: 层次:节点的层次从根开始定义起,根为第一层,根的

2021-06-27 11:00:14 137

原创 [NOIP2018]对称二叉树——(哈希,二叉树)

题目描述一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树:二叉树;将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。下图中节点内的数字为权值,节点外的 id 表示节点编号。现在给出一棵二叉树,希望你找出它的一棵子树,该子树为对称二叉树,且节点数 最多。请输出这棵子树的节点数。注意:只有树根的树也是对称二叉树。本题中约定,以节点 T为子树根的一棵“子树”指的是:节点T和它的全部后代节点构成的二叉树。本题约定: 层次:节点的层次从根开始定义起,根为第一层,根的

2021-06-27 10:56:59 450

原创 [NOIP2011]计算系数——排列组合

链接:https://ac.nowcoder.com/acm/problem/16596来源:牛客网题目描述给定一个多项式(ax+by)k,请求出多项式展开后xnym项的系数。输入描述:共一行,包含5个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。输出描述:输出共1行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007取模后的结果。示例1输入1 1 3 1 2输出3解题思路 :给定一个多项式由公式可得求解系数可采用公式c[k][n]*pow(

2021-06-26 14:50:13 441

原创 [NOIP2016]组合数问题——排列组合问题

链接:https://ac.nowcoder.com/acm/problem/16429来源:牛客网题目描述组合数表示的是从 n 个物品中选出 m 个物品的方案数。举个例子,从 (1, 2, 3) 三个物品中选择两个物品可以有 (1, 2),(1, 3),(2, 3) 这三种选择方法。根据组合数的定义,我们可以给出计算组合数的一般公式:C(n,m) = {n!}/{m!(n - m)!}小葱想知道如果给定 n,m 和 k,对于所有的 0 ≤ i ≤ n, 0 ≤ j ≤ min(i,m) 有多少

2021-06-26 11:37:08 525

原创 [NOIP2011]聪明的质监员——二分

链接:https://ac.nowcoder.com/acm/problem/16597来源:牛客网题目描述小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有n个矿石,从1到 n 逐一编号,每个矿石都有自己的重量wi以及价值vi。检验矿产的流程是:1、给定m个区间[Li,Ri];2、选出一个参数W;3、对于一个区间[Li,Ri],计算矿石在这个区间上的检验值 Yi :j是矿石编号若这批矿产的检验结果与所给标准值S相差太多,就需要再去检验另一批矿产。小T不想费时间去检验另一批矿产,

2021-06-25 17:20:38 192

原创 一元三次方程求解——(二分)

部分注释fabs(a)<=EPSEPS是个很小的数,如1e-6,因为浮点数在内存中的表示是不精确的,会有很微小的误差,所以判断是否为0,就看它的绝对值是不是<=EPS一元三次方程组求解(洛谷P1024)有形如:a x^3 + b x^2 + c x + d = 0这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在 -100 至 100 之间),且根与根之差的绝对值 ≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留

2021-06-25 15:04:20 723

原创 二分-差分例题 ——借教室

链接:https://ac.nowcoder.com/acm/problem/16564来源:牛客网类似题https://www.cnblogs.com/wsy107316/p/13377479.html题目描述在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共

2021-06-24 23:08:37 176

原创 表达式的值

题目描述运算的优先级是:1.先计算括号内的,再计算括号外的。2.“× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算。例如:计算表达式A⊕B × C时,先计算 B × C,其结果再与 A 做⊕运算。现给定一个未完成的表达式,例如_+(*),请你在横线处填入数字 0 或者 1 ,请问有多少种填法可以使得表达式的值为 0 。输入描述:共 2 行。第1 行为一个整数 L ,表示给定的表达式中除去横线外的运算符和括号的个数。第2 行为一个字符串包含 L 个字符,其中只包含’(

2021-05-19 17:04:27 1143

原创 求和(牛客网)

链接:https://ac.nowcoder.com/acm/problem/16492来源:牛客网题目描述一条狭长的纸带被均匀划分出了 n 个格子,格子编号从 1 到 n 。每个格子上都染了一种颜色 colori 用 [1,m] 当中的一个整数表示),并且写了一个数字 numberi 。定义一种特殊的三元组: (x,y,z) ,其中 x,y,z 都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:1.x,y,z 是整数, x<y<z,y-x=z-y2.colorx=colo

2021-04-21 16:26:02 722

原创 迷之好奇

FF得到了一个有n个数字的集合。不要问我为什么,有钱,任性。FF很好奇的想知道,对于数字x,集合中有多少个数字可以在x前面添加任意数字得到。如,x = 123,则在x前面添加数字可以得到4123,5123等。Input多组输入。对于每组数据首先输入n(1<= n <= 100000)。接下来n行。每行一个数字y(1 <= y <= 100000)代表集合中的元素。接下来一行输入m(1 <= m <= 100000),代表有m次询问。接下来的m行。每行一

2021-03-13 19:47:08 72

原创 字典树

遇到单词不认识怎么办? 查字典啊,已知字典中有n个单词,假设单词都是由小写字母组成。现有m个不认识的单词,询问这m个单词是否出现在字典中。Input含有多组测试用例。第一行输入n,m (n>=0&&n<=100000&&m>=0&&m<=100000)分别是字典中存在的n个单词和要查询的m个单词.紧跟着n行,代表字典中存在的单词。然后m行,要查询的m个单词n=0&&m=0 程序结束数据保证所有的单词都是有小

2021-03-13 16:01:49 145

原创 数组计算机(线段树)

bLue 有一个神器的机器,这个机器可以读入一个数组,并按照用户要求快速地进行数组的处理和计算,它支持如下两种操作:操作 1:把数组中第 p 个元素的值增加 v。操作 2:计算数组中 [l, r] 区间内所有数的和。这个机器就是这么的神奇,但是 bLue 的计算机坏掉了,你能帮他修一下吗?Input输入数据有多组(数据组数不超过 20),到 EOF 结束。对于每组数据:第 1 行输入一个整数 n (1 <= n <= 10^5),表示数组中元素的个数。第 2 行输入 n 个用空格

2021-03-13 15:08:12 88

原创 线段树的节点数

链接:https://ac.nowcoder.com/acm/problem/205174来源:牛客网题目描述小gay最近学习了线段树这个神奇的数据结构。但爱思考的小gay意识到线段树用数组保存也太浪费空间了。例如,如下一颗n=10的线段树长这个样子~其中,[a,b]表示节点表示数据范围,下标表示节点序号。可以看见,一共用了19个节点,但是标号到了25.令f(n)表示一颗n个叶子节点的线段树所占的最大数组下标。现在闲得无聊的小gay想让你帮忙求出:f(l) ⊕ f(l+1) ⊕ f(l+

2021-02-10 14:22:13 1346

原创 筱玛爱线段树

链接:https://ac.nowcoder.com/acm/problem/25737来源:牛客网题目描述筱玛是一个热爱线段树的好筱玛。筱玛的爷爷马爷在游戏中被筱玛吊打了,于是他恼羞成怒,决定给筱玛出这样一道数据结构题:给定一个长度为nn的数组AA,刚开始每一项的值均为00。支持以下两种操作,操作共mm次:\texttt{1 l r}1 l r:将A_l\sim A_rAl∼A r的每一项的值加上11。\texttt{2 l r}2 l r:执行操作编号在[l,r][l,r]内的所有操作

2021-02-03 18:49:13 102

原创 线段树()

链接:https://ac.nowcoder.com/acm/problem/17879来源:牛客网题目描述线段树是一种特殊的二叉树,满足以下性质:每个点和一个区间对应,且有一个整数权值;根节点对应的区间是[1,n];如果一个点对应的区间是[l,r],且l<r,那么它的左孩子和右孩子分别对应区间[l,m]和[m+1,r],其中m=floor((l+r)/2)(floor表示向下取整);如果一个点对应的区间是[l,r],且l=r,那么这个点是叶子;如果一个点不是叶子,那么它的权值等于左

2021-02-03 01:59:35 130

原创 图论——最短路径(Bellman-Ford算法 +spfa 算法)

适用条件&范围:单源最短路径(从源点s到其它所有顶点v);有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E的有向图);边权可正可负(如有负权回路输出错误提示);差分约束系统算法流程:扫描所有边(x, y, z),若dist[y] > dist[x] + z,则用 dist[x] + z 更新 dist[y]。重复上述步骤直至没有更新操作发生。#include <bits/stdc++.h>using namespace std;con

2021-01-29 19:56:05 131

原创 图论——最短路径(dijkstra优化)

Dijkstra 优化一 邻接表+堆优化使用邻接表实现的Dijkstra算法的时间复杂度可以降为O(n*logn+m).#include <cstdio>#include <iostream>#include <cstring>#include <cctype>#include <cstdlib>#include <algorithm>#include<vector>#include<queue&g

2021-01-29 19:17:35 171

原创 数据结构 ——堆(D - 数据结构实验之排序四:寻找大富翁)

堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。

2021-01-29 17:46:40 164

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除