自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

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