![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 70
andy cong
何以解忧,唯有编程
展开
-
51Nod 1006 最长公共子序列Lcs(dp)
1006 最长公共子序列Lcs给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。比如两个串为:abcicbaabdkscabab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。Input第1行:字符串A第2行:字符串B(A,B的长度 Output原创 2016-03-18 09:18:34 · 619 阅读 · 0 评论 -
蓝桥杯 历届试题 分糖果 (简单模拟)
题目链接问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。输入格式原创 2016-03-06 11:40:15 · 4911 阅读 · 0 评论 -
蓝桥杯 算法训练 未名湖边的烦恼 (递推)
题目链接每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)输入格式 两个整数,表示m和n输原创 2016-03-06 10:06:09 · 1238 阅读 · 0 评论 -
蓝桥杯 算法训练 P1103 (结构体指针)
题目链接编程实现两个复数的运算。设有两个复数 和 ,则他们的运算公式为: 要求:(1)定义一个结构体类型来描述复数。 (2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。 (3)必须使用结构体指针的方法把函数的计算结果返回。 说明:用户输入:运算符号(+,-,*,/) a b c d. 输出:a+bi,输出时不管a,b是小于0或等于0都按该格原创 2016-03-06 09:58:46 · 2941 阅读 · 8 评论 -
51Nod 1268 和为K的组合(搜索/+回溯)
题目链接给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K。如果可以,输出:"Yes",否则输出"No"。简单的搜索题目。思路,对于每个数据,有两种选择,选或者不选。代码:(183ms)#include"stdio.h"#include"stdlib.h"#include"string.h"const int maxn=30;int a[maxn];bo原创 2016-03-04 09:19:52 · 778 阅读 · 0 评论 -
51Nod 1413 权势二进制(巧妙,贪心)
题目链接这题真的是巧妙。。。答案就是每一位上最大值。看别人代码想了好一会呀,弱呀。列几个例子:9999:9个1111相加就行了。结果是:98999:8个1111相加,8个1111相加,再加一个111.。 结果也是:91234:1111,111,11,1 结果4个159: 111,4个11,4个1 结果9951: 111 4个110 4原创 2016-03-04 08:27:24 · 976 阅读 · 0 评论 -
51Nod 1163 最高的奖励(贪心+优先队列/并查集合)
题目:最高奖励有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,因为时间上可能会有冲突,这需要你来取舍。求能够获得的最高奖励。Input第1行:一个数N,表示任务的数量(2 <= N <= 50000)第2 - N + 1行,每行2个数,中间原创 2016-02-23 05:18:59 · 2338 阅读 · 1 评论 -
51Nod 1117 聪明的木匠(贪心+优先队列)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1117一位老木匠需要将一根长的木棒切成N段。每段的长度分别为L1,L2,......,LN(1 木匠发现,每一次切割花费的体力与该木棒的长度成正比,不妨设切割长度为1的木棒花费1单位体力。例如:若N=3,L1 = 3,L2 = 4,L3 =原创 2016-02-23 03:46:25 · 1214 阅读 · 0 评论 -
51Nod 1013 3的幂的和(快速幂+逆元)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1013求:3^0 + 3^1 +...+ 3^(N) mod 1000000007Input输入一个数N(0 Output输出:计算结果Input示例3Output示例40分析:快速幂+逆原创 2016-02-22 04:32:59 · 1080 阅读 · 0 评论 -
树的重心——树形dp
树的重心(质心):对于一颗n个节点的无根树,找到一个点,使得把树变成以该节点为根的有根树时,最大节点数最少。换句话说,删除这个节点后最大连通块(一定是树)的节点数最少。PS:首先要知道什么是树的重心,树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 实际上树的重心在树的点分治中有重要的作用, 可以避免N^2的原创 2016-02-22 02:37:26 · 2688 阅读 · 0 评论 -
树的最大独立集——树形dp
树的最大独立集:对于一颗n个节点的无根树,给出n-1条遍,选出尽量多的节点,使得任何两个节点均不相邻。输出一个最大独立集分析: d[i]:表示以i为节点的子树的最大独立集大小。 那么对于每个节点j. 取或者不取。 取j则j的孩子不能取,不取j则j的孩子可以取; 那么问题转化成了:取节点j,求出j的所有孙子的d值之和再+1。 不取j,求出j的所有儿子的d值之原创 2016-02-22 02:22:29 · 5070 阅读 · 3 评论 -
51Nod 1405 树的距离之和(树形dp)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和。Input第一行包含一个正整数n (n <= 100000),表示节点个数。后面(n - 1)行,每行两个整数表示树的边。Output原创 2016-02-22 02:03:17 · 910 阅读 · 0 评论 -
硬币问题(字典最小序)-DAG动态规划问题
题目: 有n种硬币,面值分别为V1,V2,...Vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值! 分析:我们把每种面值看作一个点!表示“还需要凑足的面值”,初始状态为S,目标状态为0。那么若当前状态在i,每使用一个硬币j,状态便转移到i-Vj因为求最大值跟求最小值类似,这里只贴记忆化搜索求最小值代码原创 2016-02-19 02:16:33 · 1074 阅读 · 1 评论 -
矩形嵌套(最小字典序)—DAG动态规划问题
初步学习DAG(有向无环图dp)问题: 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。输原创 2016-02-19 02:06:01 · 978 阅读 · 0 评论 -
51Nod 1432 独木舟(贪心)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1432分析:刘德聪只有意志坚强的人才能到达成功的彼岸如果感到靠谱的话你就点赞同这题排序需要O(nlogn) 处理只需要O(n)题目要求每个人体重都不超过船重量,不然可以先预处理超过船重量的这些人。 然后将原创 2016-02-15 18:31:08 · 550 阅读 · 0 评论 -
51Nod 1138 连续整数的和(数学、规律)
题目链接http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1138给出一个正整数N,将N写为若干个连续数字和的形式(长度 >= 2)。例如N = 15,可以写为1 + 2 + 3 + 4 + 5,也可以写为4 + 5 + 6,或7 + 8。如果不能写为若干个连续整数的和,则输出No Solution。原创 2016-02-15 02:28:32 · 1395 阅读 · 0 评论 -
蓝桥杯 历届试题 兰顿蚂蚁(简单模拟)
题目链接问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。 蚂蚁的头部朝向为:上下左右其中一方。 蚂蚁的移动规则十分简单: 若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格; 若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。原创 2016-03-06 11:25:34 · 872 阅读 · 0 评论 -
51Nod 1278 相离的圆(好题)
题目链接平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的。例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} {2, 3} {2, 4} {3, 4}这5对都有交点,只有{1, 4}是相离的。Input第1行:一个数N,表示圆的数量(1 <= N <= 50000)原创 2016-03-02 22:32:22 · 507 阅读 · 0 评论 -
51nod 1624 取余最长路
1624 取余最长路佳佳有一个n*m的带权矩阵,她想从(1,1)出发走到(n,m)且只能往右往下移动,她能得到的娱乐值为所经过的位置的权的总和。有一天,她被下了恶毒的诅咒,这个诅咒的作用是将她的娱乐值变为对p取模后的值,这让佳佳十分的不开心,因为她无法找到一条能使她得到最大娱乐值的路径了!她发现这个问题实在是太困难了,既然这样,那就只在3*n的矩阵内进行原创 2016-05-24 22:50:52 · 715 阅读 · 0 评论 -
hdu 3966 Aragorn's Story (树链剖分)
Aragorn's Story直接套用模板#include#include#includeusing namespace std;const int MAXN = 50010;struct Edge{ int to,next;} edge[MAXN*2];int head[MAXN],tot;int top[MAXN];//top[v] 表示原创 2016-04-27 22:40:35 · 411 阅读 · 0 评论 -
51Nod 1246 罐子和硬币(有趣)
题目链接:1246 罐子和硬币有n个罐子,有k个硬币,每个罐子可以容纳任意数量的硬币。罐子是不透明的,你可以把这k个硬币任意分配到罐子里。然后罐子被打乱顺序,你从外表无法区别罐子。最后罐子被编上号1-n。每次你可以询问某个罐子,如果该罐子里有硬币,则你可以得到1个(但你不知道该罐子中还有多少硬币),如果该罐子是空的,你得不到任何硬币,但会消耗1次询问的机会。你最终要得到至少原创 2016-05-23 15:42:33 · 684 阅读 · 0 评论 -
51nod 1270 数组的最大代价(dp好题)
1270 数组的最大代价数组A包含N个元素A1, A2......AN。数组B包含N个元素B1, B2......BN。并且数组A中的每一个元素Ai,都满足1 (公式表示所有两个相邻元素的差的绝对值之和)给出数组B,计算可能的最大代价S。Input第1行:1个数N,表示数组的长度(1 <= N <= 50000)。第2原创 2016-05-23 16:20:18 · 725 阅读 · 0 评论 -
51nod 1024 矩阵中不重复的元素(简单粗暴)
1024 矩阵中不重复的元素一个m*n的矩阵。该矩阵的第一列是a^b,(a+1)^b,.....(a + n - 1)^b第二列是a^(b+1),(a+1)^(b+1),.....(a + n - 1)^(b+1).......第m列是a^(b + m - 1),(a+1)^(b + m - 1),.....(a + n - 1)^(b + m -原创 2016-05-23 20:26:10 · 1192 阅读 · 0 评论 -
51nod 1352 集合计数(扩展欧几里德)
1352 集合计数给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2},{N,1}.求出有多少个集合满足:第一个元素是A的倍数且第二个元素是B的倍数。提示:对于第二组测试数据,集合分别是:{1,10},{2,9},{3,8},{4,7},{5,6},{6,5},{7,4},{8,3},{9,2},{10,1}.满足条件的是第2个和第原创 2016-05-24 21:57:10 · 832 阅读 · 0 评论 -
hdu Summer Holiday(tarjan)
Summer Holiday分析: 只需找出所有的强连通分量,然后遍历所有的边,对于边u->v,若u、v在不同的连通子图,显然v的子图可以从边u->v达到,对于这样的两个强连通分量,可以视为一个子图,只需打电话给u所所在的子图中人,然后让这个人再联系u,v所在的两个强连通分量中的所有人。故只需找出所有的子图,打给每个子图中话费最低的那个人即可。基本套用taijan模板。原创 2016-04-25 20:46:09 · 455 阅读 · 0 评论 -
51nod 1076 2条不相交的路径(tarjan)
题目链接给出一个无向图G的顶点V和边E。进行Q次查询,查询从G的某个顶点V[s]到另一个顶点V[t],是否存在2条不相交的路径。(两条路径不经过相同的边)(注,无向图中不存在重边,也就是说确定起点和终点,他们之间最多只有1条路)学习tarjan算法十分详细:https://www.byvoid.com/blog/scc-tarjan/原创 2016-04-25 14:03:27 · 1264 阅读 · 0 评论 -
51Nod 1021 石子归并(经典dp)
1021 石子归并N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。例如: 1 2 3 4,有不少合并方法1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19)1 2 3 4 => 1 5 4(5) => 1 9(14)原创 2016-03-18 20:43:57 · 1526 阅读 · 0 评论 -
51Nod 1183 编辑距离(dp)
1183 编辑距离编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k->s)sittin (e->i)sitting (->g)所以kitten和sit原创 2016-03-18 09:16:05 · 606 阅读 · 0 评论 -
51NOd 1134 最长递增子序列(dp)
1134 最长递增子序列给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。Input第1行:1个数N,N为序列的长度(2 <= N <= 50000)第2 - N + 1行:每行1个数,对应序列的元素(-10^9 Output输出最长递原创 2016-03-18 09:13:33 · 1662 阅读 · 0 评论 -
蓝桥杯 历届试题 错误票据 (输入)
问题描述某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。你的任务是通过编程,找出断号的ID和重号的ID。假设断号不可能发生在最大和最小号。输入格式要求程序首先输入一个整数N(N原创 2016-03-16 13:43:41 · 546 阅读 · 0 评论 -
蓝桥杯 历届试题 剪格子(记忆化搜索)
问题描述如下图所示,3 x 3 的格子中填写了一些整数。+--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ 我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部原创 2016-03-16 12:16:10 · 590 阅读 · 0 评论 -
蓝桥杯 往届试题(C++B组)
2012年第三届蓝桥杯C/C++程序设计本科B组省赛2013年第四届蓝桥杯C/C++程序设计本科B组省赛2014年第五届蓝桥杯C/C++程序设计本科B组省赛2015年第六届蓝桥杯C/C++程序设计本科B组省赛转载 2016-03-15 18:54:17 · 1580 阅读 · 0 评论 -
51nod 1060 最复杂的数(反素数)
最复杂的数学习:把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中复杂程度最高的那个数。例如:12的约数为:1 2 3 4 6 12,共6个数,所以12的复杂程度是6。如果有多个数复杂度相等,输出最小的。Input第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 100)第2 - T + 1行:T个数,表示需要计算的n原创 2016-03-10 18:10:47 · 1099 阅读 · 0 评论 -
51Nod 1094 和为k的连续区间 (前缀和暴力枚举/map优化)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1094 一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 Input第1行:2个数N,K。N为数列的长度。K为需要求的和。(2 <= N <= 10000,原创 2016-02-14 03:58:37 · 702 阅读 · 0 评论 -
51Nod 1007 正整数分组(01背包的变形)
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1007将一堆正整数分为2组,要求2组的和相差最小。例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。Input第1行:一个数N,N为正整数的数量。第2 - N原创 2016-02-13 01:17:49 · 744 阅读 · 0 评论 -
51Nod1174 区间中最大的数(学习线段树)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1174给出一个有N个数的序列,编号0 - N - 1。进行Q次查询,查询编号i至j的所有数中,最大的数是多少。例如: 1 7 6 3 1。i = 1, j = 3,对应的数为7 6 3,最大的数为7。(该问题也被称为RMQ问题)Input第1行:1个数...原创 2016-02-11 02:09:10 · 1233 阅读 · 3 评论 -
51Nod 1092 回文字符串(LCS跟dp)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。每个字符串都可以通过向中间添加一些字符,使之变为回文字符串。例如:abbc 添加2个字符可以变为 acbbca,也可以添加3个变为 abbcbba。方案1只需要添加2个字符原创 2016-02-14 03:26:19 · 652 阅读 · 0 评论 -
无平方因子的数(数论好题)
题目:(题目跟分析基本都是书上,我只是敲几个代码跟大家分享)无平方因子的数。 给出正整数n,m。区间[n,m]内 “无平方因子” 的数有多少个??整数p无平方因子,当且仅当不存在k>1,使得p是k^2的倍数. 1分析: 直接枚举肯定会超时, 使用的方法和筛选素质类似的,对于不超过 sqrt(m)的所有素数p,筛掉区间[n,m]内p^2的倍数原创 2016-01-31 01:44:24 · 4751 阅读 · 2 评论 -
51Nod(1256乘法逆元逆元)
给出2个数M和N(M Input输入2个数M, N中间用空格分隔(1 Output输出一个数K,满足0 Input示例2 3Output示例2这道题目不会做,通过看别人的博客才做了,理解还不是很透彻。可以通过下面几位大神介绍学习百度百科:http://baike.baidu.com/li原创 2016-01-31 03:52:31 · 797 阅读 · 0 评论 -
51Nod1119机器人走方格(费马儿定理+快速幂函数) 好题
题目:M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。Input第1行,2个数M,N,中间用空格隔开。(2 Output输出走法的数量 Mod 10^9 + 7。Input示例2 3Output示例3个人感觉是一道好题。从大神博客学得。h原创 2016-01-31 05:07:07 · 601 阅读 · 0 评论