自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Happig的博客

我不够强大,但我足够努力

  • 博客(30)
  • 资源 (7)
  • 收藏
  • 关注

原创 UVA - 10723 Cyborg Genes(类LCS)

传送门首先如果要求出最优解长度,实际上就是类似LCSLCSLCS的做法,只是LCSLCSLCS只保留公共部分作为答案,那么本题只需保存一下非公共的部分:设d[i][j]d[i][j]d[i][j]表示字符串s1s_1s1​判断到位置iii,字符串s2s_2s2​判断到jjj时的最短串的长度,边界是d[i][0]=d[0][i]=id[i][0]=d[0][i]=id[i][0]=d[0][i]=i,那么有:如果s1[i−1]==s2[j−1]s_1[i-1]==s_2[j-1]s1​[i−1]==s

2020-06-30 11:10:01 154

原创 UVA - 242 Stamps and Envelope Size(类完全背包)

传送门首先紫书描述不清,最大连续邮资是从111开始,增量为111、用给定邮票拼出来的多个邮资。1,2,3,4,51,2,3,4,51,2,3,4,5是,而2,3,4,5,62,3,4,5,62,3,4,5,6不是注意输出格式状态转移我们知道这个题状态的转移必须是由较小的和转移到较大的和,而且如果贴三张邮票,那么可以由贴两张对应邮票的状态再加一张转移而来。因此我们没有必要枚举每种邮票贴几张,而是枚举邮票的和设d(j)d(j)d(j)为当前邮票和为jjj时需要的最小邮票个数,kkk是一张邮票的下标,

2020-06-30 10:41:29 372

原创 UVA - 1630 Folding(字符串处理+区间DP)

传送门首先我们观察到若一个串可以折叠,那么必然是折叠后的长度小于原来长度。然后还有一点,还可能是这个串的两部分折叠后拼接,实际上对应着另外一种转移的情况。那么不难发现这是一个区间DP的问题状态转移设d(i,j)d(i,j)d(i,j)为区间[i,j]折叠后的最小长度,区间长度为lll,那么我们先考虑是否可以自身折叠,设resresres为我们求出该区间的最小周期,字符串tmptmptmp为周期个数对应字符串,则有:d[i][j]=tmp+′(′+d[i][i+res−1]+′)′,tmp.size

2020-06-30 10:08:08 218

原创 UVA - 1629 Cake slicing(记忆化搜索)

传送门一个矩形可以用左上角的坐标和右下角的坐标来表示,实际上就是暴力枚举每个切割的阶段,这里使用了两个记忆化,一个是已经切割的状态,另外是一个(x1,y1)到(x2,y2)(x_1,y_1)到(x_2,y_2)(x1​,y1​)到(x2​,y2​)矩形内的樱桃个数。切割时一些细节注意一下就好了#include <set>#include <map>#include <stack>#include <queue>#include <math.

2020-06-29 12:46:12 148

原创 UVA - 10118 Free Candies(记忆化搜索/状压)

传送门方法一一开始我确实是这样想的,设d[i][j][k][p][S]d[i][j][k][p][S]d[i][j][k][p][S]为四堆分别拿了i,j,k,pi,j,k,pi,j,k,p个,当前已拿糖果用状态压缩为SSS,但是很明显,最多20种糖果,最后的空间为40∗40∗40∗40∗(1<<20)40*40*40*40*(1<<20)40∗40∗40∗40∗(1<<20),内存爆了啊,然后就GG了后来去洛谷看到一篇题解,和上述思路类似。也就是说如果我们想知道

2020-06-29 12:38:11 166

原创 UVA - 10285 Longest Run on a Snowboard(记忆化搜索)

传送门多阶段的决策问题,肯定是记忆化搜索了设d(i,j,dir)d(i,j,dir)d(i,j,dir)为在坐标(i,j)(i,j)(i,j)处向dirdirdir方向走出的最长路,然后有:d(i,j,dir)=max(d(i+dx,j+dy,k)),a[i][j]>a[i+dx][j+dy],0<k<4d(i,j,dir)=max(d(i+dx,j+dy,k)),a[i][j]>a[i+dx][j+dy],0<k<4d(i,j,dir)=max(d(i+dx,j

2020-06-29 09:53:15 145

原创 区间DP——最优三角剖分

问题引入给出一个n各顶点的凸多边形,有很多种方法可以对它进行三角剖分,即用n-3条互不相交的对角线把凸多边形分成n-2个三角形。为每个三角形规定一个权函数w(i,j,k)w(i,j,k)w(i,j,k),求让所有三角形权值和最大的方案状态转移如果允许自由切割,那么多边形的顶点在原多边形中可以随意选取,很难定义成简洁的状态,无法找到递推的联系。如图选取了BCEG,这样的状态无法表示,因此我们需要将决策规范化定义d(i,j)d(i,j)d(i,j)为子多边形i,i+1,...,j−1,ji,i+1,.

2020-06-28 10:10:27 376

原创 UVA - 1628 Pizza Delivery(区间DP)

传送门一开始以为O(n4)O(n^4)O(n4)是过不了代码的,但是回顾了之前LRJ分析时间复杂度下最大数据量,1e8是可以在1s内解决的本题因为罚款和送餐时间相关,而这个时间无法记录。考虑之前的时间归零技巧,那么需要知道后面送的人数,于是增加一维状态记录人数,接着正常的区间DP即可。状态的定义比较复杂,区间DP还是尽量写记忆化搜索,尝试写了一下递推但是样例没过,心态炸了,还是记忆化搜索方便= =#include <set>#include <map>#include

2020-06-27 23:47:54 216

原创 UVA - 12170 Easy Climb(dp+离散化+单调队列优化)

传送门首先看下简化版的问题分析,当n=3n=3n=3时,只有h2h_2h2​是可以修改的,而且修改之后必须同时在[h1−d,h1+d],[h3−d,h3+d][h_1-d,h_1+d],[h_3-d,h_3+d][h1​−d,h1​+d],[h3​−d,h3​+d]之间,即[max(h1,h3)−d,min(h1,h3)+d][max(h_1,h_3)-d,min(h_1,h_3)+d][max(h1​,h3​)−d,min(h1​,h3​)+d]。如果这个区间是空的那么无解;否则我们发现h2h_2h2

2020-06-27 23:35:38 305 6

原创 UVA - 10559 Blocks(区间DP+思维)

传送门问题的分析见紫书,LRJ老师解释的很详细%%%这道题学到了以下感悟:学会如何分析问题,转化为DP模型(区间DP),尝试正常的区间DP状态定义——行不通。结合问题,尝试改变状态定义或者增加维度以实现正确思路。本题就是在区间DP的基础上确定了增加一维来表示右边拼上一些方块得到的最大得分区间DP的解决,使用记忆化搜索比DP更加简单且不易出错,就按照LRJ的模型学习掌握即可#include <set>#include <map>#include <stack&

2020-06-26 23:54:58 300

原创 UVA - 12099 The Bookcase(01背包问题+优化)

链接紫书没有提到的是,这三个书架都是非空的容易知道,高度最大的那本书一定是某层的高度,那么我们假设它在第一层。因为某一层的高度是取所有书的max(H)max(H)max(H)而宽度是sum(d)sum(d)sum(d),因为这层书的高度是不容易转移的,但是宽度之和却容易转移,那么将宽度和作为决策的一部分状态状态转移设d(i,j,k)d(i,j,k)d(i,j,k)表示安排完前iii本书,第二层的宽度之和为jjj,第三层的宽度之和为kkk时,第二层和第三层高度和的最小值。当然将书按高度从大到小排序,

2020-06-26 23:45:01 254

原创 UVA - 1204 Fun Game(字符串模拟+状压DP)

传送门第一部分实际上这一部分就是解决LRJ老师说的简化版问题问题描述给出nnn个字符串,找到一个最短的字符串,使得这nnn个字符串都是它的连续子串,输出其长度状态转移实际上最后的答案是nnn个字符串的长度之和减去每个串和前一个串的最大重叠长度设d(i,j)d(i,j)d(i,j)表示已经选过的字符串集合为iii,最后一个字符串为jjj时,可以减去的重叠部分总长,预处理任意两个字符串的最大重叠长度为w(i,j)w(i,j)w(i,j)。考虑由当前状态更新未知状态,那么:d(i+k,k)=ma

2020-06-25 19:56:21 250

原创 UVA - 12105 Bigger is Better(DP)

传送门首先,此类问题——模某个数的动态规划,一般都是从其他余数转移而来然后本题用到了一个比较重要的大数求余的性质,也就是说大数可以一位一位得操作从而达到取余的目的,可以参考这里方法一状态转移设d(i,j)d(i,j)d(i,j)表示用iii根火柴能拼出的除以mmm余数为jjj的最大数,使用字符串string表示大数。因为状态的转移是互相独立的,那么考虑刷表法,设d(i,j)d(i,j)d(i,j)拼上当前个位数kkk后为curcurcur,由当前状态更新未知状态:d(i+c(k),(j∗10+

2020-06-25 00:06:42 147

原创 UVA - 1336 Fixing the Great Wall(经典区间DP)

传送门这样的题目见过几次了,给出起点,遍历若干坐标,每次既可以向左走又可以向右走,每个点对应权值函数,然后找一个最优的走法1.首先需要想到的一点是,因为修理某点不耗费时间,所以假如下一个点是对应需要修理的最优点,那么从当前点到下一个最优点的路途中,可以顺便修理中间的点,那么这样就是最优花费。那么我们在修理过程中,已修理的区间一定是连续的,那么考虑区间dp2.因为不知道当前时间,因此费用不能在到达某点时再计算,而是事先将肯定会发生的费用累加到答案中,然后“时钟归零”。对于所有区间显然需要按坐标排序,这

2020-06-24 13:37:39 213

原创 UVA - 10934 Dropping water balloons(思维+dp)

传送门很神奇的一道题,看起来是求最小的实验次数,实际上程序主体并没有用到minminmin,而是递推解决问题,先看下LRJ的思路:设d[i][j]d[i][j]d[i][j]用i个气球实验j次所能测试楼的最高层数,第一次决策,设测试楼层为kkk:如果气球破了,说明前k−1k-1k−1层必须能用i−1i-1i−1个球实验j−1j-1j−1次测出来,也就是说k=d[i−1][j−1]+1k=d[i-1][j-1]+1k=d[i−1][j−1]+1是最优如果气球没破,则相当于把第k+1层楼看作1楼

2020-06-23 21:00:03 189

原创 UVa10817、UVa1252(状压DP+记忆化搜索)

10817这道题状态的定义还算好理解,但是不太懂为什么要记忆化搜索,搜了几十篇题解差不多都是记忆化搜索,不知道递推能不能解决这道题,先放着吧#include <set>#include <map>#include <stack>#include <queue>#include <math.h>#include <cstdio>#include <string>#include <bitset>

2020-06-23 16:46:43 156

原创 棋盘状压DP汇总(HDU1565、洛谷P1879、洛谷P1896、洛谷P2704)

HDU15651.实际上取数时只有一个条件限制,就是取到一个数的上下左右的数都不能再取。然后题目数据范围都很小,显然使用状压DP2.做题步骤分为下面几步:找到合法的状态:!(i&(i<<1))  ∣∣  !(i&(i>>1))!(i\&(i<<1)) ~~||~~ !(i\&(i>>1))!(i&(i<<1))  ∣∣ &nbsp

2020-06-22 10:57:13 217

原创 状压+BFS小总结(HDU1429、洛谷P2622)

HDU14291.首先迷宫问题最短路径,肯定想到了BFS,但是此题多了一个条件,就是有最多十扇门,而且必须找到钥匙才能开门,题目的数据都很小。那么我们不难想到,不能单纯地使用vis[x][y]vis[x][y]vis[x][y]来判重,因为有钥匙的状态和没有钥匙的状态是不同的,每一格可以在不同状态下重复走2.因为最多有10把钥匙,那么我们使用二进制表示每一位是否取过,即1<<i1<<i1<<i表示第iii把钥匙的状态,使用三维的vis数组判重,并在结构体中保存每个节

2020-06-22 09:40:57 245

原创 状压DP——TSP问题

前言集合的交,并,对称差运算分别对应二进制的与,或,异或状压DP就是利用数字的二进制状态表示一个图,然后剪枝枚举,再加上DP的思想问题引入有n(n≤20)n(n \leq 20)n(n≤20)座城市,两两之间均有道路连接。给出每两个城市iii和jjj之间的道路长度G[i][j]G[i][j]G[i][j],求出一条经过每个城市一次且仅一次,最后回到起点的路线,使得经过的道路总长度最短,城市编号为1−n1-n1−n状态转移首先我们设节点编号为0−(n−1)0-(n-1)0−(n−1),这样方便状态

2020-06-20 20:32:54 590

原创 树的直径

树的直径对于一棵含有nnn个节点n−1n-1n−1条边的树,其直径定义为树上的最长链(最长路径)。而且容易得到,再连接首尾两点,会形成一个最大环求树的直径,可能会想到从某一节点出发先求一条最长路径,接着求和其不相交的次长路径。但是此做法比较麻烦。也还能对所有节点求一次最长路,取最长的,时间复杂度为O(n2)O(n^2)O(n2),也没戏。下面介绍求树的直径的两种思路:DFS和动态规划DFS思路:从任意一点uuu先做一次dfsdfsdfs找到最远的一点tailtailtail,在从tailtailta

2020-06-19 10:59:36 328

原创 UVA - 1218 Perfect Service(树形DP)

传送门树形DP实际上就是在dfs的过程中进行DP,此问题是树的最大独立集的一种变形,但是分析的方式一样设:d(u,0)d(u,0)d(u,0):uuu是服务器,每个子节点可以是服务器也可以不是d(u,1)d(u,1)d(u,1):uuu不是服务器但uuu的父亲是服务器,则uuu的所有子节点都不是服务器d(u,2)d(u,2)d(u,2):uuu和uuu的父亲都不是服务器,意味着uuu有且仅有一个儿子是服务器那么我们可以写出:d(u,0)=1+Σmin(d(v,0),d(v,1))d(u

2020-06-18 23:32:20 138

原创 树形DP——树的最大独立集

问题引入树的最大独立集:对于一棵nnn个节点的无根树,选出尽量多的节点,使得任何两个节点均不相邻,输出最大独立集的顶点个数方法一状态转移设d(i,k)d(i,k)d(i,k)表示以iii为根节点,选或不选对应的最大独立集大小d(i,0)d(i,0)d(i,0)表示该节点不选,那么下个节点可以选也可以不选,即d(i,0)+=max(d(son[i],0),d(son[i],1));{d(i,0)+=max(d(son[i],0),d(son[i],1));}d(i,0)+=max(d(son[i

2020-06-18 11:44:44 566

原创 华为杯中国地质大学(武汉)第十七届ICPC程序设计大赛暨华中地区部分高校第十五届ICPC邀请赛

比赛传送门A-Alice的难题题解传送门B-卡牌对战游戏题解传送门C-HW的糖果俱乐部(签到)考虑:奇+奇=偶偶+偶=偶因此偶数可以任选,但是奇数必须保证偶数个,因此先选出所有偶数接着对奇数排序,选尽量大的偶数个即可#include <set>#include <map>#include <stack>#include <queue>#include <math.h>#include <cstdio&

2020-06-08 10:53:45 1418

原创 H - 和平精英(二分+并查集)

传送门1.很经典的一道题,之前做过类似的一道题碟中谍,这个题只是判断条件多了几个,但是做法都一样2.首先要满足圆的半径尽量大,因为这样才可以覆盖的范围更大以至于敌人无法通过,然后答案又要求最小,肯定想到二分圆的半径了3.然后我们知道,当圆与圆至少有一个交点时,那么中间是无法通过的,不难想到这时的圆与圆形成了若干个连通块,那么考虑这些连通块,我们只需求出连通块的上下左右边界,然后判断是否形成如下四种情况之一:时间复杂度O(n2logk),kO(n^2logk),kO(n2logk),k为常数#

2020-06-08 10:35:26 672

原创 B - 卡牌对战游戏(动态RMQ)

传送门1.因为一点小失误,一直没调出来,有点可惜2.实际上有点LIS的感觉,我们设d(i)d(i)d(i)表示从iii开始的攻击力最大值,b[i]b[i]b[i]为位置iii的攻击力,那么可以得出:d(i)=max(d(i),b[i]+d(j)),j>i{d(i) = max(d(i),b[i]+d(j)),j>i}d(i)=max(d(i),b[i]+d(j)),j>i考虑从后向前递推,那么我们只需要求出每一个位置前面已经更新的位置中,满足生命值之差的绝对值小于等于ddd的最大

2020-06-08 10:16:04 310

原创 A - Alice的难题(数论+前后缀预处理)

传送门1.第一步肯定是求出所有数的鸡汤值了,考虑到最小质因子,使用欧拉筛即可求得(不懂自行百度)2.对于三个不相交的连续区间a,b,ca,b,ca,b,c,如下所示:我们可以发现对应排列有以下六种情况:a,b,ca,b,ca,b,ca,c,ba,c,ba,c,bb,a,cb,a,cb,a,cb,c,ab,c,ab,c,ac,a,bc,a,bc,a,bc,b,ac,b,ac,b,a3.对于上面的每种情况,我们设从左向右分别是x,y,zx,y,zx,y,z。不难想到我们需要在区间[x,

2020-06-08 10:02:54 357

原创 动态区间最值(RMQ)——线段树

建树a数组为初始数组,tree数组为树typedef long long ll;const int inf=0x7fffffff;const int maxn=2e5+10;int a[maxn];int tree[maxn<<2];建树函数和普通线段树唯一的区别就是更新时取左右子树的最值void build(int i,int l,int r){ //i传入1 if(l==r){ tree[i]=a[l]; return;

2020-06-07 22:37:09 744

原创 Codeforces Round #646 (Div. 2) A. Odd Selection(枚举/思维)

传送门解法一奇数肯定由至少一个奇数和若干偶数相加得到,不难发现偶数对答案没有影响,只是为了凑个数,那么我们从1到n枚举所有的奇数,判断是否存在选择了某个数量的奇数能够构造成功注意x-i要判断是否大于0解法二:有一个比较重要的结论,那就是只要一个序列中既含有奇数有含有偶数且选择的数目小于n,那么一定可以构造成功(之前也不知道,找不到正确的证明,就先记住8)然后考虑下面的几种情况:全为奇数时,若x为奇数,则成功;否则失败全为偶数时,失败x<n且既含有奇数又含有偶数时,成功x==n且

2020-06-03 19:24:43 320

原创 Codeforces Round #646 (Div. 2) C. Game On Leaves(思维/简单博弈)

传送门首先分析一下,只有一种必胜态,那就是当x节点只连接一个节点时,那么下一个人必胜,然后不难想到每个人都不想对方先到必胜态,那么每个人都会一直取其他地方,知道x节点只剩一个连接节点,即判断n−2n-2n−2是奇数还是偶数PS:当只有x一个节点时需要特判!#include <set>#include <map>#include <stack>#include <queue>#include <math.h>#include &lt

2020-06-01 23:27:59 181

原创 UVA - 1626 Brackets sequence(区间DP+打印解)

传送门本来这个题只需要学习一下dp的打印解,但是通过紫书的代码,又学到了一手区间dp的写法,证明如下因为区间dp的本质是根据i-j递增的顺序来枚举,因此还能i逆序,j顺序的方法解决问题以长度为3的区间为例分析一下正确性:容易知道长度为2的区间能够正确递推,而长度为3的区间,我们的顾虑是并不能得出[L,m2][L,m_2][L,m2​]但是在下面从i−ji-ji−j枚举kkk时,第一次更新了区间[L,m1][L,m_1][L,m1​],第二次刚好更新了[L,m2][L,m_2][L,m2​],长

2020-06-01 12:04:59 220

stopwords.txt

作中文分词时的停用词,几个资源整合而来,较为全面

2021-12-12

数据结构实验——赫夫曼树相关

本人本科期间学习数据结构写的实验,内容如下 1、输入一段报文,例如: CAST CAST SAT AT A TASA 统计字符集合 { C, A, S, T },以及各个字符出现的频度(次数) W={ 2, 7, 4, 5 }。 2、建赫夫曼树,并输出各个字符的赫夫曼编码 3、输入编码01100……,能准确翻译成报文 4、要求有菜单。

2020-05-13

数据结构实验——二叉树相关操作

本人本科期间数据结构二叉树的实验 1、建立二叉树的存储结构 2、先序、中序、后序遍历二叉树(要求任选某一种用非递归算法完成) 3、查询二叉树中某个结点 4、统计二叉树中叶子结点的个数 5、求二叉树的深度 6、要求有菜单

2020-05-13

数据结构实验——字符串相关操作

本人本科学习期间数据结构的第三个实验 1、实现串赋值、串比较、求串长、串联接、求子串以及串匹配(KMP算法) 2、能利用上述实现的基本操作完成置换Replace (&S, T, V)以及从串中删除一段子串StrDelete(&S,pos,len)的操作

2020-05-13

数据结构实验——表达式求值

实现了前缀表达式求值,可执行功能为加减乘除和括号,数据类型是计算机双精度浮点数,支持多位整数和多位小数。实现思路是根据运算符的优先级,边输入边计算

2020-04-06

数据结构实验——链表实现XXX管理系统

数据结构的实验:实验题目是**管理系统。要求用带头结点的单链表实现具有插入、删除、显示、修改、保存至文件以及读入文件等功能的**管理系统。加至少3个结构成员,其中必须包含一个字符类或字符数组类,并使用排序等功能

2020-04-06

Base conversion.cpp

在完成课后作业过程中,无法辨认计算的进制转换是否正确,于是想写个程序去完成,既能节省时间,也能对一下答案。该简单代码支持2-16进制浮点数相互转换,最多精确到小数点后308位

2020-02-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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