
算法
经典算法、天梯赛、洛谷、蓝桥杯、CSP
Fight_adu
这个作者很懒,什么都没留下…
展开
-
动态规划(DP)-01背包问题-(百练)1163:The Triangle
描述Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.输原创 2020-06-05 10:51:26 · 224 阅读 · 0 评论 -
动态规划(DP)-完全背包问题
完全背包问题:有n种物品,每种物品的单件重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品都有无穷件。完全背包问题与01背包问题的区别:完全背包的物品数量每种有无穷件,选取物品时对同一种物品可以选1件、选2件…只要不超过容量V即可,而01背包的物品数量每种只有一件。完全背包问题的每种物品都有两种策略:①不放第i件物品,那么(dp[i][j]=dp[i-1][j])二维数组{二维数组}二维数组 = >(dp[j]=dp[j原创 2020-06-05 09:34:55 · 667 阅读 · 0 评论 -
动态规划(DP)-01背包问题
01背包问题:有n件物品,每件物品的重量为w[j],价值为c[j]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品都只有一件。先采用暴力枚举解决此问题解题思路:①每一件物品放或者不放进背包(两种选择)②若选择此物品,背包的容量V,和总价值W都要随之变化,返回选与不选的物品中价值最大值,否则,V,W都不需要变化③注意临界条件:选择的物品总体积不可以超过总的体积,注意i的值Code:#include<iostream>#include<原创 2020-06-05 03:11:22 · 340 阅读 · 0 评论 -
贪心算法-(百练)1083:Moving Tables
描述The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure.The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a plan to reform its s原创 2020-05-19 16:30:40 · 557 阅读 · 0 评论 -
Dijkstra-旅游规划
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中原创 2020-05-18 19:54:11 · 399 阅读 · 0 评论 -
贪心-Kruskal-并查集
概念:Kruskal:每次选择图中边权值最小的边加入最小生成树,并且加入的边不能构成回路.判断加入的边是否会构成回路 ==> 采用并查集方法并查集(UnionFindSet):是一种树型的数据结构,用于处理一些不想交集合的合并及查询问题主要操作:(1)初始化:把每个点所在集合初始化为其自身(2)查找:查找两个元素所在的集合,即找祖宗注意:查找时,采用递归的方法找其祖宗,祖宗集合...原创 2020-04-29 17:30:43 · 276 阅读 · 0 评论 -
图论-强连通分量-(百练)2186:Popular Cows
描述Every cow’s dream is to become the most popular cow in the herd. In a herd of N (1 <= N <= 10,000) cows, you are given up to M (1 <= M <= 50,000) ordered pairs of the form (A, B) that t...原创 2020-04-28 20:31:27 · 396 阅读 · 0 评论 -
图论-有向图中的强连通片
概念:强连通图:在有向图中,如果图中任何两个顶点Vi到Vj有路径,且Vj到Vi也有路径,则称G为强连通图强连通分量:有向图G的极大强连通子图称为G的强连通分量极大强连通子图:该子图是图G的强连通子图,如果再加入一个顶点,该子图不再是强连通的。1、先求图G的拓扑排序序列2、按照拓扑排序序列对rG进行深搜,把能到达的所有节点划分在一个强连通分量内,并进行标号3、输出标号的大小即是强连通分...原创 2020-04-28 19:35:30 · 1841 阅读 · 0 评论 -
贪心-Prime-(百练)1287:Networking
描述You are assigned to design network connections between certain points in a wide area. You are given a set of points in the area, and a set of possible routes for the cables that may connect pairs o...原创 2020-04-26 15:41:53 · 337 阅读 · 0 评论 -
贪心-Prime-(百练)2377:Bad Cowtractors
描述Bessie has been hired to build a cheap internet network among Farmer John’s N (2 <= N <= 1,000) barns that are conveniently numbered 1…N. FJ has already done some surveying, and found M (1 &l...原创 2020-04-26 15:22:22 · 278 阅读 · 0 评论 -
贪心-最小生成树-Prime
最小生成树(MST):是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G 中的所有顶点,且所有边是来自图G中的边,并且满足整棵树的边权之和最小。性质:①最小生成树是树,因此其边数等于顶点数减1,且树内一定不会有环②对给定的图G(V,E),其最小生成树可以不唯一,但其边权之和一定是唯一的③由于最小生成树是在无向图上生成的,因此其根节点可以是这棵树上的任意一个结点Prime算法...原创 2020-04-23 20:48:23 · 537 阅读 · 0 评论 -
图论-BFS-六度空间
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图所示。“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太...原创 2020-04-21 20:31:41 · 701 阅读 · 0 评论 -
图论-BFS-二分图-(PATA)1154 Vertex Coloring (25分)
A proper vertex coloring is a labeling of the graph’s vertices with colors such that no two vertices sharing the same edge have the same color. A coloring using at most k colors is called a (proper) k...原创 2020-04-21 19:52:30 · 284 阅读 · 0 评论 -
图论-DFSandBFS
深度优先遍历:算法步骤(递归):①初始化图中所有顶点未被访问②从图中的某个顶点v出发,访问v并标记已访问③依次检查v的所有邻接点w,如果w未被访问,则从w出发进行深度优先遍历,重复②和③Code:#include<iostream>#include<vector>#include<algorithm>using namespace std;...原创 2020-04-21 16:06:06 · 231 阅读 · 0 评论 -
图论-DFS-Lake Counting
描述Due to recent rains, water has pooled in various places in Farmer John’s field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains...原创 2020-04-18 15:28:11 · 245 阅读 · 0 评论 -
图论-关键路径-7-11 关键活动 (30分)
假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,...原创 2020-04-12 11:25:00 · 615 阅读 · 0 评论 -
图论-拓扑排序应用-7-12 How Long Does It Take (25分)
Given the relations of all the activities of a project, you are supposed to find the earliest completion time of the project.Input Specification:Each input file contains one test case. Each case sta...原创 2020-04-07 19:46:44 · 306 阅读 · 0 评论 -
图论-拓扑排序(有向图)
拓扑排序的两种求法:First:利用discoverTime(发现时间)&finishTime(结束时间)Second:利用入度第一种:Code:#include<iostream>#include<vector>#include<algorithm>using namespace std;int ans=1,flagCycle=0...原创 2020-04-07 16:19:04 · 648 阅读 · 0 评论 -
堆排序的应用-(POJ)Entropy
描述An entropy encoder is a data encoding method that achieves lossless data compression by encoding a message with “wasted” or “extra” information removed. In other words, entropy encoding removes inf...原创 2020-03-24 21:27:47 · 311 阅读 · 0 评论 -
堆-实现堆结构(百练4078)
描述定义一个数组,初始化为空。在数组上执行两种操作:1、增添1个元素,把1个新的元素放入数组。2、输出并删除数组中最小的数。使用堆结构实现上述功能的高效算法。输入第一行输入一个整数n,代表操作的次数。每次操作首先输入一个整数type。当type=1,增添操作,接着输入一个整数u,代表要插入的元素。当type=2,输出删除操作,输出并删除数组中最小的元素。1<=n<=...原创 2020-03-17 18:09:25 · 978 阅读 · 0 评论 -
二分-月度开销
描述农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来 N (1 ≤ N ≤ 100,000) 天里每天需要的开销。约翰打算为连续的M (1 ≤ M ≤ N) 个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连续的多天,每天被恰好包含在一个fajo月里。约翰的目标是合理安排每个fajo月包含的天数,使得开销最多...原创 2020-03-15 23:15:56 · 224 阅读 · 0 评论 -
二分-派
描述我的生日要到了!根据习俗,我需要将一些派分给大家。我有N个不同口味、不同大小的派。有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成;可以是一整个派)。我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨。因此所有人拿到的派是同样大小的(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好。当然,我也要给自己留一块,而这一块也要和...原创 2020-03-15 20:29:21 · 288 阅读 · 0 评论 -
二分-查找最接近的元素
描述在一个非降序列中,查找与给定值最接近的元素。输入第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均...原创 2020-03-15 11:08:33 · 773 阅读 · 0 评论 -
天梯赛-L2-009 抢红包 (25分)
没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。输入格式:输入第一行给出一个正整数NNN(≤104\le 10^4≤104),即参与发红包和抢红包的总人数,则这些人从1到NNN编号。随后NNN行,第iii行给出编号为iii的人发红包的记录,格式如下:KN1P1⋯NKPKK\quad N_1\quad P_1\quad \cdots\qu...原创 2020-03-10 21:15:18 · 256 阅读 · 0 评论 -
二分-分巧克力
问题描述:儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi×Wi 的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:1. 形状是正方形,边长是整数2. 大小相同例如一块6×5的巧克力可以切出6块2×2的巧克力或者2块3×3的巧克力。当然小朋...原创 2020-03-10 13:45:23 · 492 阅读 · 0 评论 -
括号匹配问题
问题描述:括号问题:给长度不超过20的仅由’(’, ‘)’, ‘?‘的字符串,’?‘可替换为’(‘或’)’,问有多少种合法的括号序列。合法序列指符号串的括号可以配对。例: (??) 应输出 2 (因为(())和()()是2种合法序列)输入样例1:(??)输出样例1:2输入样例2:(???)输出样例2:0样例解析:(??)的有效序列:① (())② ()()(???)的有...原创 2020-03-09 20:41:03 · 275 阅读 · 0 评论 -
递归-子集和问题
问题描述:集合M(M元素个数≤100),整数S(≤20000),问集合M里面是否存在子集和等于S。若相等,返回Ture,否则,返回False.输入样例1:4 76 4 2 1输出样例1:True输入样例2:4 206 3 4 2输出样例:False坑点1:此程序执行需要剪枝,时间复杂度为O(NS)否则为2^N坑点2:当集合M内为98个1 第99个为100 S...原创 2020-03-08 22:57:07 · 605 阅读 · 0 评论