算法
基本的算法样例
沉蛋
这个作者很懒,什么都没留下…
展开
-
Blood Cousins CodeForces - 208E(LCA+树上启发式合并)
Polycarpus got hold of a family relationship tree. The tree describes family relationships of n people, numbered 1 through n. Each person in the tree has no more than one parent.Let’s call person a a...原创 2020-02-10 15:25:04 · 183 阅读 · 0 评论 -
Hawk-and-Chicken HDU - 3639 (Tarjan缩点+反向建图求最长链)
Kids in kindergarten enjoy playing a game called Hawk-and-Chicken. But there always exists a big problem: every kid in this game want to play the role of Hawk.So the teacher came up with an idea: Vot...原创 2020-02-10 15:04:47 · 167 阅读 · 0 评论 -
E. Fools and Roads(树上差分)
题目传送门They say that Berland has exactly two problems, fools and roads. Besides, Berland has n cities, populated by the fools and connected by the roads. All Berland roads are bidirectional. As there a...原创 2020-01-18 11:50:29 · 396 阅读 · 0 评论 -
E. Minimum spanning tree for each edge(MST+LCA)
**题目传送门Connected undirected weighted graph without self-loops and multiple edges is given. Graph contains n vertices and m edges.For each edge (u, v) find the minimal possible weight of the spannin...原创 2020-01-16 11:37:50 · 278 阅读 · 0 评论 -
作业12——分支限界解决最大团和图m着色问题
1.问题最大团:求一张无向图的最大团。团的定义:给定图G=(V,E),其中,V={1,…,n}是图G的顶点集,E是图G的边集,图G的团就是一个两两之间有边的顶点集合,团是G的一个完全子图。如果一个团不被其他任一团所包含,即它不是其他任一团的真子集,则称该团为图G的极大团(maximal clique)。顶点最多的极大团,称之为图G的最大团(maximum clique)——来源于百度百科图的m着色问题:给定一个无向图G=(V, E),其中V为顶点集合,E为边集合,图着色问题即为将V分为K个颜色组,每个组原创 2020-05-27 17:38:37 · 2608 阅读 · 1 评论 -
作业11——贪心解决最优前缀码问题
1.问题给定字符集 C={x1,x2,x3,...,xn}C=\{x_1,x_2,x_3,...,x_n\}C={x1,x2,x3,...,xn}和每个字符的频率f(xi){f(x_i)}f(xi) ,求关于 C 的一个最优前缀码前缀码:是在有效字符前加的通用型代码。任何一个字符的编码都不能是其他字符编码的前缀,此即前缀码特性。具有前缀码特性的编码即为前缀码(名字有歧义)。最优前缀码:对于编码字符集C,使平均码长达到最小的前缀码编码方案。(前缀码和最优前缀码定义来源于百度百科)2.解析原创 2020-05-13 13:23:34 · 666 阅读 · 0 评论 -
作业10——贪心求解相容问题
1.问题设S={1,2,3,… ,n}为活动集合,s[i],f[i]分别为活动i的开始时间和结束时间,i=1,2,3,… ,n规定相容的定义:(s[j]>=f[i] && i<j) || (s[i]>=f[j]&&i>j),求S最大的两两相容子集A2.解析因为使用贪心算法,所以有多项可供我们贪心,有开始时间,活动的时长,开始时间/结束...原创 2020-04-29 12:21:50 · 206 阅读 · 0 评论 -
作业9——动态规划求解LCS
1.问题给定向量X=<X1,X2,...,Xn>{X=<X_1,X_2,...,X_n>}X=<X1,X2,...,Xn>Y=<Y1,Y2,...Ym>{Y=<Y_1,Y_2,...Y_m>}Y=<Y1,Y2,...Ym>求解X和Y的最长公共子序列2.解析设dp[i][j]为X的前i位和Y的前j位的LCS的...原创 2020-04-21 18:32:31 · 270 阅读 · 0 评论 -
作业8——动态规划求解矩阵链最少乘法
1.问题设A1,A2,...,An {A_1,A_2,...,A_n} A1,A2,...,An为n个矩阵序列,其中Ai=Pi−1∗Pi{A_i=P_{i-1}*P_i}Ai=Pi−1∗Pi阶矩阵,矩阵链的输入用向量P=<P1,P2,...,Pn>P=<{P_1,P_2,...,P_n}>P=<P1,P2,...,Pn>给定向量P,确定一种...原创 2020-04-15 10:02:54 · 799 阅读 · 0 评论 -
作业7——动态规划求解投资问题
1.问题设 m 元钱,n 项投资,函数f(x)表示将 x 元投入第 i 项项目所产生的效益,i=1,2,…,n.问:如何分配这m元钱,使得投资的总效益最高?2.解析首先可以对问题建模:求解max{f1(x1)+f2(x2)+…+fn(xn)},且x1+x2+…+xn=m由问题我们可以设dp[i][j],cost[i][j]数组,dp代表花费j元投资前i项的所获取的最优效益,cost代表...原创 2020-04-08 11:37:13 · 1772 阅读 · 1 评论 -
作业6——分治求第K小的数
1.问题设L是n个元素的集合,从L中选取第K小的元素,其中1<=K<=n。2.解析1.选取序列中的任意数m,若m满足比m小的数有|S1|+1,则m为第K小的数2.若K<|S1|,则缩小问题规模,归纳为在S1中寻找第K小。3.若K>|S2|,则缩小问题规模,归纳为在S2中寻找第K-|S1|-1小。4.不断重复步骤1,2,3,直到找到第K小的数为止。3.设计...原创 2020-03-31 21:30:24 · 739 阅读 · 0 评论 -
分治求大数乘法
#include<iostream>#include<string>#include<algorithm>using namespace std;typedef long long ll;//911911911911 911911911911//123456789 987654321void addzero(string& x, strin...原创 2020-03-27 22:56:06 · 147 阅读 · 0 评论 -
作业5——分治法求最近点对问题
1.问题求笛卡尔平面中最近点对的欧几里得距离。2.解析1.先以5作分割线,得PL{5,6,7,8}和PR{1,2,3,4}2.重复操作,直到PL或PR的点集大小<=33.例如PL{7,8}和PR{5,6},存在最小点距d1,d2,令d1<d2,则dmin=d14.易得dmin不一定是最小点距,所以以dmin为划分空间,分割线上的点为基准点,此处为7,筛选出|x-x1|<...原创 2020-03-24 22:39:55 · 345 阅读 · 0 评论 -
作业4——归并算法排序
1.问题对n个不同的数构成的数组A[1…n]进行二分归并排序,其中n=2^k2.解析3.设计void Merge(int A[], int l, int r) { int mid = (l + r) / 2; int i = l, j = mid + 1; int tmp[9] = { 0 }, cnt = 0; while (i <= mid && j ...原创 2020-03-17 20:22:05 · 146 阅读 · 0 评论 -
作业3——查找算法
1.问题给定有序序列T[1,2,…,n],查找特定值X,若序列中存在X,则返回下标j,否则返回0。2.解析定义pos为数组下标,val为下标对应的值,X为151.线性查找2.二分查找定义二分指针左指针为l,右指针为r返回pos=53.哈希表查找定义哈希表Map[i],代表i的下标通过X就可以直接查询到下标pos=53.设计线性查找:int linearSearch(...原创 2020-03-10 22:09:38 · 134 阅读 · 0 评论 -
作业2——Floyd,Dijkstra算法解决最短路问题
1.问题定义G为任意超过两个顶点的有向连通图,若点i到j存在路径,则一定存在一条i到j的最短路径。本次实验将运用Floyd和Dijkstra求解最短路问题。2.解析Floyd算法:1.选取1作为中间点,遍历整图,mp[4][1]+mp[1][3]<mp[4][3],所以mp[4][3]更新为11,见图22.选取2作为中间点,遍历整图,mp[1][2]+mp[2][3]<mp[...原创 2020-03-04 17:34:37 · 337 阅读 · 0 评论 -
作业1——Prim,Kruskal求MST
1.问题给定一个无向加权图G=(V, E),最小生成树为集合T, T是以最小代价连接V中所有顶点所用边E的最小集合。根据Prim和Kruskal算法求出T及最小代价。2.解析Prim算法:Kruskal算法:3.设计//T,E的定义与上述相同void Prim(int s)//s为起点 { visit[s] = true;//标记进入T的点 for (i 1 ... n)...原创 2020-02-26 19:24:12 · 164 阅读 · 0 评论