- 博客(33)
- 收藏
- 关注
原创 图的m着色问题(DFS回溯算法)
1. 问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答 “NO”“NO”“NO” 。2. 解析设 GGG 有 nnn 个顶点,将顶点编号为 1,2,…,n1,2,…,n1,2,…,n 则搜索空间为深度 nnn 的 mmm 叉完全树,将颜色编号为 1,2,…,m1,2,…,m1,2,…,m,结点 <x1,x2,…xk>(x1,x2,…xk∈{1,…,m},1≤k
2021-06-14 17:51:41
619
原创 最优前缀编码 哈夫曼算法
1. 问题给定字符集 C=<x1,x2,...,xn>C=<x_1,x_2,...,x_n>C=<x1,x2,...,xn> 和每个字符的频率 f(xi)f(x_i)f(xi),求关于 CCC 的一个最优前缀码。2. 解析构造最优前缀码的贪心算法就是哈夫曼算法pop:pop:pop: 每次从队列中取出两个权值最小的节点当作孩子节点push:push:push: 根据 poppoppop 操作取出的两个子结点,构成一个带有新的权值(两个子结
2021-06-14 17:34:52
1266
原创 装载问题(01背包)
1. 问题装载问题,给定 nnn 个 wiw_iwi 的集装箱和有最大装载量 CCC 的轮船,问最多能装几个集装箱。2. 解析3. 设计装载问题#include<bits/stdc++.h>const int N = 1e3+10;using namespace std;int n,m,k;int w[N];int dp[N],pre[N][N];/** * 打印装载方案 */void print() { cout<<"\nthe ma
2021-06-14 14:02:21
131
原创 动态规划 LCS + 完全背包
1. 问题动态规划中关于最长公共子序列 LCSLCSLCS 、完全背包的问题2. 解析动态规划问题,一般都会涉及到状态的转移,最佳的状态值必然是由前一个最佳状态值递推而来,所以可以我们直接将问题抽象为一个整体,考虑当前最佳状态值是由什么状态转移而来。最长公共子序列 LCSLCSLCS 问题 :这里要区分子序列 subsequencesubsequencesubsequence 和子串 substringsubstringsubstring 的区别, 前者是可以不连续的,后者必须是连
2021-05-17 19:24:20
116
原创 矩阵链乘法
1. 问题2. 解析bottom−up:bottom-up:bottom−up: 自底向上。从最底层的小区间开始逐个合并,最后合并到最大的区间。divide:divide:divide: 区间的分割。根据分割点k,我们可以分割为两个区间,例如 [i,j][i,j][i,j] 可以分割为 [i,k][i,k][i,k] 和 [k+1,j][k+1,j][k+1,j] 两个区间。transfer:transfer:transfer: 状态的转移,或可以说是区间的合并。由于 [i,k][i
2021-05-01 19:34:01
202
原创 动态规划求解投资最优问题
1. 问题一般性描述:设 mmm 元钱,nnn 项投资项目,函数 fif_{i}fi 表示将 xxx 元投入第i项项目所产生的效益,i=1,2,⋅⋅⋅,ni=1,2,···,ni=1,2,⋅⋅⋅,n问:如何分配这 mmm 元钱,使得投资总效益最高?组合优化问题:假设分配给第i个项目的钱数是 xix_{i}xi目标函数:max(f1(x1)+f2(x2)+⋅⋅⋅+fn(xn))max({f_1(x_1)+ f_2(x_2)+···+ fn(x_n)})max(f1(x1)+
2021-04-25 18:43:44
1455
原创 分治策略找第K小元素
1. 问题使用特定的分治策略去寻找无序数组中第 kkk 小的元素。2. 解析select:select:select: 我们每次会挑选一个主元 pivotpivotpivot 。这里有多种选择策略,这里我们选择挑取序列第一个。partition:partition:partition: 根据 pivotpivotpivot 划分序列。保证 pivotpivotpivot 左边元素均比它小,右边元素均比它大 。divide:divide:divide: 分治策略。我们根据给定的要
2021-04-19 23:02:49
1645
原创 平面最近点对算法 ClosestPair
1. 问题平面最近点对问题,给定一个平面内所有点的坐标,找出这些点中最近的两个点的距离。2. 解析朴素暴力算法:求解平面最近点对问题,需要枚举两个点对,然后记录最小的点对距离,故总时间复杂度为 O(N2)O(N^2)O(N2)分治法求解最近点对:DivideDivideDivide:将当前的集合问题转化为两个子集合问题,即将当前 [l,r][l,r][l,r] 的集合分割成 [l,mid][l,mid][l,mid] 和 [mid+1,r][mid+1,r][m
2021-04-13 21:35:06
1154
原创 归并排序 MergeSort
1. 问题使用归并排序对 nnn 个不同的数构成的数组 A[1..n]A[1..n]A[1..n] 进行排序,其中 n=2kn=2^kn=2k。2. 解析归并排序通过分治和有序表归并的思想,可以通过递归实现,是一种稳定的排序算法。DivideDivideDivide:将当前的元素分成两份,即将 [L,R][L,R][L,R] 区间的元素分割成 [L,mid][L,mid][L,mid] 和 [mid+1,R][mid+1,R][mid+1,R]。MergeMergeMerge:
2021-03-29 20:07:03
96
原创 检索算法 BinarySearch + InterpolationSearch
1. 问题在有序数组 T[1...n]T[1...n]T[1...n] 中查找 xxx如果 xxx 在 TTT 中,输出 xxx 在 TTT 的下标 jjj如果 xxx 不在 TTT 中,输出 j=0j = 0j=02. 解析二分查找算法:二分查找通过将当前查询区间一分为二的思想进行查找,由于 xxx 必然在当前查询区间中,那么我们通过左边界 LLL 和 RRR 可以确定分割点为 mid=(L+R)/2mid = (L+R)/2mid=(L+R)/2 ,那么 xxx 必然在分割点
2021-03-25 17:11:13
115
原创 最短路 Floyd + Dijkstra
1. 问题在一给定的有向图 G<V,E>G<V, E>G<V,E> 中,V代表点集,E<u,v,w>E<u, v,w>E<u,v,w> 代表连接顶点 uuu 与顶点 vvv 且边权为w的边集。给定顶点 SSS 和起点 EEE,要求出 SSS 点到 EEE 点的总权值的最小路径,即最短路问题。用FloydFloydFloyd 算法求解下图各个顶点的最短距离,并求得距离矩阵(顶点之间的最短距离矩阵)。对于下图使用 Dijks
2021-03-17 08:41:55
109
原创 最小生成树 Prim + Kruskal
1. 问题在一给定的无向图G<V,E>G<V, E>G<V,E> 中,E<u,v>E<u, v>E<u,v> 代表连接顶点 uuu与顶点 vvv 的边,而 W<u,v>W<u, v>W<u,v> 代表此边的权重。若存在 TTT 为 EEE 的子集且为无环图,使得的 W(T)W(T)W(T) 最小,即需要找到一颗最小权重生成树(简称最小生成树)。2. 解析PrimPrimPrim 算法:开始随机选
2021-03-09 14:13:12
266
原创 如何使用font-spider压缩中文文字 + debug的心路历程
一、Html5中导入外部字体在Html5中引入外部字体,只需要在你的css中声明下面两段函数即可,但是由于中文数量较多,导致文件大小较大,所以导致加载比较慢。@font-face { /** 可以把这里的jelly替换成你的文字名称*/ font-family: 'jelly'; /** src请根据自己的url路径进行修改 */ src:url("../../static/font/jelly.ttf") format("trueType");}.text { fo
2020-12-26 16:59:06
316
原创 Java抽象类和接口初了解
一、抽象类我们先定义了一个抽象类叫做AbstractDoor,里面有两个抽象方法add和delete。于抽象方法而言,它并不需要实现具体的功抽象类必须被继承,才能将抽象的方法实例化。所以我们重新定义一个Test类来继承我们的抽象类AbstractDoor,所以这里就会涉及到重写override,这里的Test类将add和delete方法都重写了。但是如果不对抽象类中的抽象方法重写,就会出现如下的报错。所以抽象类生来就是被继承的,也必须要重写其中的抽象方法,...
2020-12-08 18:22:38
281
原创 Java多态初了解
一、多态的定义:面向对象程序设计的三大支柱是封装、继承和多态。多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同的操作。用更通俗的话来讲,就是具体问题具体分析。二、首先我们来看一段代码来具体感受一下:public class Test { public static void main(String[] args) { util a = new util(); a.use(); keyboard
2020-11-22 10:32:06
187
2
原创 Java正则表达式初了解
1、正则表达式的定义首先,我们要知道正则表达式是什么东西正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。即用一种自定义的逻辑模式来对字符串进行匹配。2、正则表达式的用处既然科学家提出、并规范了这个模式,那必然有其神奇的作用:1、灵活性、逻辑性和功能性非常强;2、可以迅速地用极简单的方式达到字符串的复杂控制。3、可以判断给定的字符串是否符合正则表达式的过滤逻辑,即是否
2020-10-21 18:04:18
198
原创 Eclipse创建Class并打印hello world + github注册
创造Class,并输出Hello worldpublic class Hello { public static void main(String[] args) { System.out.println("hello world"); }}
2020-09-15 16:06:13
714
1
原创 Codeforces Round #666 (Div. 2)E Monster Invaders
题意:有两种不同类型的怪物和三种不同类型的枪,一个拥有1点生命的普通怪物。一个拥有2点生命的老板。这三种枪是:手枪,对一个怪物造成1点生命伤害,时间r1激光枪,对当前等级的所有怪物(包括老板)造成1点伤害,时间r2AWP,立即杀死任何怪物,时间r3这些枪最初是不装子弹的,Ziota一次只能装1把枪。如果Ziota伤害了boss但没有立即杀死它,他将被迫从当前关卡移动到任意相邻关卡i−1或者i+1,Ziota也可以随时选择移动到相邻的楼层。相邻层之间的每一次移动都由传送门管理,传送时间为d。
2020-08-31 17:52:19
1928
12
原创 POJ2686 Traveling by Stagecoach(dp+TSP)
题目很长就不直接粘贴复制过来了题意:给你n张车票,m个城市,p条边(由x城市到y城市的z长度),a是起点,b是终点。你每走一条路就会花掉一张车票,而这条路上的时间花费为路长/票的价值。如果能由起点a到达终点b就输出最小的时间花费,否则输出Impossible。题解:由于n的数据范围很小,最大为8,很明显就可以把每张票的状态作为状压的入手点。1表示用过这张票,0表示没有。那么我们就可以直接暴力枚举总的状态(1<<n) ,枚举每张车票,枚举每个顶点和起点。然后用下面这个状态转移方程代
2020-07-27 19:47:15
139
原创 HDU1074 Doing Homework(状态压缩 + 输出最合理的取法)
Problem DescriptionIgnatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after the deadline, the teacher will reduce
2020-07-24 12:37:20
190
原创 滚动数组(简单说明)
前提概要首先呢,滚动数组是一种能够在动态规划中降低空间复杂度的方法,有时某些二维dp方程可以直接降阶到一维,在某些题目中甚至可以降低时间复杂度,是一种极为巧妙的思想,简要来说就是通过观察dp方程来判断需要使用哪些数据,可以抛弃哪些数据,一旦找到关系,就可以用新的数据不断覆盖旧的数据量来减少空间的使用,接下来我会介绍一些有关滚动数组的一些题目。以斐波那契数列为例我们先以斐波那契数列来简单感受一下滚动数组的魅力,先上一段经典的代码(使用滚动数组)#include<bits/stdc++.h>
2020-07-18 23:37:32
12140
6
原创 HDU1024 Max Sum Plus Plus(最大字段和)
Problem DescriptionNow I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem.Given a consecutive number sequence S1, S2
2020-07-14 11:15:36
214
原创 HZNUoj 1875 WA Jiana的游戏
题目WA Jiana在ACM队的代号是188(kg)。188很喜欢边吃边捣鼓各种小游戏。近两天,她听说软工班的短学期在做贪吃蛇小游戏,这让贪吃的她很心动。她也很想做一个这样的小游戏,但是贪吃蛇实在是太高端了她不会写,于是她挑了一个更简单的游戏——数独。数独的游戏规则如下:用19内的数字填充一个9×9的矩阵,要求填充完后每行都恰好用到19中的每个一个数字(位置不限),每列也恰好用到19中的每个数字(位置不限)。同时,每个3×3的九宫格(9×9的矩阵可恰好划分出9个九宫格,即下图的5个黄色区域和4个白色区域
2020-06-28 00:28:12
953
原创 codeforces 124C Prime Permutation(并查集+思维)
题目:You are given a string s, consisting of small Latin letters. Let’s denote the length of the string as |s|. The characters in the string are numbered starting from 1.Your task is to find out if it ...
2020-04-29 18:01:46
176
原创 FZU 1012 Relatives(欧拉函数模板)
题目:Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if there are no integers x > 1, y > 0, z > 0 such ...
2020-04-29 14:34:48
133
原创 LibreOJ - 6165 欧拉筛法+最小质因子
题目:一天,szb 在上学的路上遇到了灰太狼。灰太狼:帮我们做出这道题就放了你。szb:什么题?灰太狼:求一个能被 [1,n] 内所有数整除的最小数字,并对 100000007 取模。szb:这题太水了,就让我小弟来做好了。然后你就光荣的接受了这个任务。Input一行一个数 n。Output一行一个数 ans。题意:求lcm(1到n),如果直接用gcd算会tle,所以此题用最小...
2020-04-25 22:56:10
713
原创 HDU1599 floyd最小环(无向图)问题
题目:杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,…VK,V1,那么必须满足K>2,就是说至除了出发点以外至少要经过2个其他不同的景区,而且不能重复经过同一个景区。现在8600需要你帮他找一条这样的路线,并且花费越少越好。Input第一行是2个整数N和M(N <= 100, M <...
2020-04-25 18:40:43
639
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人