- 博客(20)
- 收藏
- 关注
原创 8月19日 queue&stack
Team Queue POJ - 2259题意:有n个小组要进行排队,每个小组中有若干个人。当一个人来到队伍时,如果队伍中已经有自己小组的成员,他就直接插队排在自己小组成员的后面,否则就站在队伍的最后面。给定不超过2∗10^5个入队指令(编号为X的人来到队伍)和出队指令(队头的人出队),输出出队的顺序。输入:多组输入。第一行是小组个数n(1<=n<=1000),接下来n行每行包括每组人数k(k<=1000)和成员编号x,范围0~999999,n=0时结束。后面是指令行,有三种
2020-08-18 01:47:14 154
原创 算法大作业 圆排列问题
问题圆排列问题:给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。解析圆排列问题的解空间是一棵排列树。按照回溯法搜索排列树的算法框架,设开始时a=[r1,r2,……rn]是所给的n个圆的半径,则相应的排列树由a[1:n]的所有排列构成。1、compute函数可以想象其中任意的一个圆无限大或无限小,无限大的话那其余的圆就可以统统忽略了。因为已知所有圆的x坐标和半径r,很容易求出每个圆的左右坐标,通过比较找出最小的左部坐标和最大的右部坐标,一减就是该圆排列的长度,
2020-06-15 22:34:55 659
原创 实验13 读书笔记
我在学院ACM团队训练时学习了《算法竞赛进阶指南》这本书,该书不论是对于致力于研究算法方向的同学,还是对于有一定工作经历的程序员来说,都十分适合阅读。这本书分为八个较为独立的章节领域,我对这本书知识点的了解程度还远远不够,但是算法本身对于我的吸引程度是极大的。在这本书的数据结构进阶板块讲解了并查集、树状数组、线段树、二叉查找树、平衡树等数据结构,以及分块、点分治等思想,还探讨了基于时间或值域的离线分治算法,以及两种可持久化数据结构。这些数据结构大多是位运算、递归、分治、倍增等基本算法在树上或复杂序列上的进
2020-06-09 23:20:21 227
原创 实验12 图的m着色问题
问题给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。解析四色猜想:四色问题是m图着色问题的一个特例,根据四色原理,证明平面或球面上的任何地图的所有区域都至多可用四种、颜色来着色,并使任何两个有一段公共边界的相邻区域没有相同的颜色。这个问题可转换成对一平面图的4-着色判定问题(平面图是一个能画于平面上而边无任何交叉的图)。将地图的每个区域变成一个结点,若两个区域相邻,则相应的结点用一条边连
2020-06-08 22:58:37 347
原创 实验11 最优前缀编码
问题给出n个字符的频率,给每个字符赋予一个01编码串,使得任意一个字符的编码不是另一个字符编码的前缀,而且编码后总长度(每个字符的频率与编码长度乘积的总和)尽量小。解析哈夫曼算法第一步:初始化n个单节点的树,并为它们标上字母表中的字符。把每个字符的概率记在树的根中,用来指出树的权重(更一般地来说,树的权重等于树中所有叶子的概率之和)。第二步:重复下面的步骤,直到只剩一棵单独的树。找到两棵权重最小的树(对于权重相同的树,可任意选择其一)。把它们作为新树中的左右子树,并把其权重之和作为新的权重记录在新
2020-05-18 11:33:13 451
原创 实验10 贪心:相容问题
问题有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多。解析贪心解决相容问题方案一:按每项活动占用时间排序(id顺序为老师所给按截止时间排序的顺序,即方案三)所选活动id:2,4,8。最多可选3项方案二:按每项活动的开始时间排序所选活动id:1,5。最多可选2项方案三:按每项活动...
2020-05-05 00:30:13 245
原创 实验9 用动态规划解决最长公共子序列(LCS)问题
问题给定序列X=<x_1,x_2,…,x_m>Y=<y_1,y_2,…,y_j>求X和Y的最长公共子序列(LCS)解析用动态规划解决最长公共子序列问题。设dp[i][j]表示字符串S1前i位与字符串S2前j位的LCS,则dp[n][m]即为答案。具体遍历过程如下表:S1:2345678,S2:135789设计#include<cstdio>...
2020-04-27 23:10:01 1007
原创 实验8 用动态规划解决矩阵链乘法
问题解析设计#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cstdlib>#include<cmath>using namespace std;typedef long long ll;...
2020-04-21 00:45:28 229
原创 实验7 用动态规划解决投资问题
问题设m元钱,n项投资,函数f[i][x]表示将x元投入第i项项目所产生的效益,i=1,2,…,n。 问:如何分配这m元钱,使得投资的总效益最高?解析用动态规划解决投资问题设dp[i][j]表示投给前i个项目j万元的最大效益递推方程:dp[i][j]=max(dp[i][j],dp[i-1][j-k]+f[i][k)用ans[i][j]表示投给前i个项目j万元,投给第i个项目的钱设计...
2020-04-13 23:56:07 704
原创 实验6 分治法选第K小元素
问题选出所给数组中第K小的元素解析分治法选第K小元素1、首先将给定数组分为n/5各组,每组最多5个元素。将每小组进行排序,找出每组的中位数2、用select递归找到所有中位数的中位数t,然后划分数组,t是第K小的元素,划分地区中元素数目比K小1,同时有n-k个元素在另一片区域3、如果 ln==k,返回t,若小于,递归找到前区域第ln个,否则在后区域递归第ln-k个元素设计int p...
2020-04-07 00:38:13 923
原创 实验5 分治法求最近对问题
问题找出平面上n个点中距离最近的点对。解析分治法求最近对问题:把所有点按x坐标升序排列,然后找1~n范围内的最近对。如果n=2或n=3,直接暴力找到最近对即可如果n>3,利用分治策略找到中线,分为(le,mid)和(mid+1,ri)两部分。答案的最近对两点可能在中线同侧或者异侧,递归得到同侧最近对后,特殊处理异侧情况。将当前界限(le,ri)的原数组a中的点与中线水平方向距离...
2020-03-30 23:47:05 410
原创 实验4 二分归并排序
问题二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k解析以中间的数为基准,每次排序都将比它小的数放在前面,将比它大的数放在后面。设计void merge(int a[], int le, int mid, int ri) { int i = le, j = mid + 1, k = le; while (i != mid + 1 && j ...
2020-03-23 22:36:29 226
原创 实验3-2 二分法查找元素x的下标
问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0解析二分法查找元素x的下标用le和ri二分数组元素的下标,mid=(le+ri)/2,初始le=1,ri=n。当a[mid]<x时,le=mid+1,否则,ri=mid-1,最终le一定会大于ri,此时输出le的值就是若元素x存在时的下标。最后判断一下a[le]是否等于x即可设计...
2020-03-16 23:13:22 639
原创 实验3-1 遍历法查找元素x的下标
问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0解析遍历法查找元素x的下标用for循环将i从1~n依次遍历,当a[i]==x时,记录下标j=i,若当i>n时,j仍然未被赋值,则输出0设计for (i = 1; i <= n; i++) { if (x == a[i]) { j = i; //当a[i]==x时,...
2020-03-16 22:35:11 462
原创 实验2-2 单源最短路算法Dijkstra
问题如果从图中某一顶点到达另一顶点的路径可能不止一条,如何找到一条路径使得沿此路径上各边的权值总和(称为路径长度)达到最小。可以将适用最短路的算法分为单源最短路和多源最短路。解析单源最短路算法Dijkstra对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径。即从剩余路径中找最短的路径...
2020-03-09 21:59:16 326
原创 实验2-1 多源最短路算法Floyd
问题如果从图中某一顶点到达另一顶点的路径可能不止一条,如何找到一条路径使得沿此路径上各边的权值总和(称为路径长度)达到最小。可以将适用最短路的算法分为单源最短路和多源最短路。解析多源最短路算法Floyd以下图为例,用Floyd算法求解下图各个顶点的最短距离。从任意节点 i 到任意节点 j 的最短路径有两种可能,一是直接从 i 到 j ,二是从 i 经过若干个节点 k 到 j 。所以核心...
2020-03-09 20:36:59 203
原创 Kruskal算法:将森林合并成树
问题在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得w(T) 最小,则此 T 为 G 的最小生成树。即将给出的所有点连接起来,找出连接路径之和最小的图叫最小生成树。解析:Kruskal算法:将森林合并成树简易解析:以边为主导地位,始终选择当前可用(所选...
2020-03-02 02:08:01 1828
原创 PRIM算法:让一棵小树长大
问题:在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得w(T) 最小,则此 T 为 G 的最小生成树。即将给出的所有点连接起来,找出连接路径之和最小的图叫最小生成树。解析:PRIM算法:让一棵小树长大简易解析:任选一点作为当前生成树的起始点,选择以该点...
2020-03-02 02:02:52 248
原创 2月4日题解
A题 CodeForces - 1060C Maximum Subrectangle题意:输入n,m以及两个长度分别为n和m的数组A和B,这两个数组分别是二维数组C的第一行和第一列,其余元素遵循Ci,j=AiBj。再输入一个整数x。在二维数组C中找内部元素和不大于x的矩形,求矩形的最大面积。思路:首先搞清楚一个规律:对于任意一个子矩阵(l1…r1)(l2…r2),其内部元素和等于(a...
2020-02-04 13:27:00 228
原创 1月13日题解
Two Sets CodeForces - 468B(并查集)**题意:**输入n,a,b。再输入n个数p1,p2,…pn。有两个集合A和B,这n个数中如果x属于集合A,a-x也必须属于集合A;如果x属于集合B,b-x也必须属于集合B。如果能分为两个集合的话,输出“YES”并输出每个元素属于集合A还是B,0表示属于集合A,1表示属于集合B。**思路:**先假设存在一种合理的方案,即任意一个x,...
2020-01-13 17:27:24 356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人