随笔分类 -  uva

摘要:题意:有一个由N个片段构成宽度的洞穴,已知洞顶 si 和洞底 pi 的高度,要求储存尽量多的燃料。 解法:O(n),分别从1到N和从N到1扫一遍,调整每个片段合法的最大高度,求出答案。 阅读全文
posted @ 2016-11-03 19:02 konjac蒟蒻 阅读(356) 评论(0) 推荐(0)
摘要:题意:有T组数据,N个点,M条边,每条边有一定的花费。问最小生成树和次小生成树的权值。 解法:具体请见 关于生成树的拓展 {附【转】最小瓶颈路与次小生成树}(图论--生成树) 阅读全文
posted @ 2016-11-03 16:22 konjac蒟蒻 阅读(325) 评论(0) 推荐(0)
摘要:题意:平面上有N个石头,给出坐标。一只青蛙从1号石头跳到2号石头,使路径上的最长便最短。输出这个值。(2≤N≤200) 解法:最小瓶颈树。而由于这题N比较小便可以用2种方法:1.最短路径中提到过的Floyd算法,利用DP思想枚举出所有情况,O(n3)。具体关于Floyd算法的一些解释得等我过几天写一 阅读全文
posted @ 2016-11-03 11:32 konjac蒟蒻 阅读(735) 评论(0) 推荐(0)
摘要:题意:假设一种音乐播放器有一个乱序的功能,设定每播放S首歌为一个周期,随机播放编号为1~S的歌曲。现在给一个长度为N的部分播放记录,请统计下次随机排序所发生的时间的可能性种数。(1≤S,N≤100000) 解法:由“连续的S个数”想到滑动窗口。O(n)循环一次,每次判断一个周期的[i-S+1,i]是 阅读全文
posted @ 2016-11-02 20:05 konjac蒟蒻 阅读(391) 评论(0) 推荐(0)
摘要:题意:平面上有N个点(1≤N≤1000),若要新建边,费用是2点的欧几里德距离的平方。另外还有Q个套餐,每个套餐里的点互相联通,总费用为Ci。问让所有N个点连通的最小费用。(2组数据的输出之间要求有换行) 解法:利用二进制枚举套餐,时间复杂度是O(2QN2+N2logN)。关于时间复杂度,枚举:二进 阅读全文
posted @ 2016-11-02 08:37 konjac蒟蒻 阅读(739) 评论(0) 推荐(0)
摘要:题意:给一个N(N<=100)个点的联通图(无自环和平行边),求苗条度(最大边-最小边的值)尽量小的生成树。 解法:枚举+Kruskal。先从小到大排序边,枚举选择的最小的边。 阅读全文
posted @ 2016-11-01 20:23 konjac蒟蒻 阅读(187) 评论(0) 推荐(0)
摘要:题意:如题,用表达式树来表示一个表达式,且消除公共的部分,即用编号表示。编号 K 定义为表达式第 K 个出现的字符串。 解法:先构造表达式树,给每棵子树用(string,left_son,right_son)-->(哈希值,...,...)编号。由于最多出现4个小写字母,所以可以用27进制数表示,同 阅读全文
posted @ 2016-11-01 17:17 konjac蒟蒻 阅读(556) 评论(0) 推荐(0)
摘要:题意:环形跑道上有N个加油站,编号为1~N。第 i 个加油站可以加油Ai加仑,从加油站 i 开到下一站需要Bi加仑汽油。问可作为起点走完一圈后回到起点的最小加油站编号。 解法:我们把每个加油站的Ai,Bi合并,把Ai-Bi看成N个点的权Ci,表示经过 i 的剩余油量。可知可通过第 i 个加油站就是s 阅读全文
posted @ 2016-11-01 11:42 konjac蒟蒻 阅读(551) 评论(0) 推荐(0)
摘要:题意:初始1个红气球,每小时后,1个红气球会变成3个红气球和1个蓝气球,而1个蓝气球会变成4个蓝气球。问经过N小时后,第L~R行一共有多少个红气球。 解法:问行数就定义f[i][j]表示 i 小时后前 j 行的红气球数。分情况讨论后就可得出递推方程。 注意——1.数组开不小就时间换空间,递归替代递推 阅读全文
posted @ 2016-11-01 10:55 konjac蒟蒻 阅读(338) 评论(0) 推荐(0)
摘要:题意:有N个数,每次选2个数合并为1个数,操作的开销就是这个新的数。直到只剩下1个数,问最小总开销。 解法:合并的操作可以转化为二叉树上的操作【建模】,每次选两棵根树合并成一棵新树,新树的根权值等于两棵合并前树的根权值和(也与Huffman编码的建立过程类似,选权值最小的两棵树)。 这样总开销就是除 阅读全文
posted @ 2016-11-01 08:42 konjac蒟蒻 阅读(508) 评论(0) 推荐(0)
摘要:题意:将1个含N个正整数的序列划分成K个连续的子序列,使每段的和的最大值尽量小,问字典序最小的划分方案。 解法:由于是连续的数的“最大值最小”,便可想到二分每段的最大值,若这时可分成<=K段,则这个最大值成立,再继续二分。 输出方案需要用到贪心策略, 先从后往前贪心求得最小划分的段数M,若M不足K, 阅读全文
posted @ 2016-10-31 22:22 konjac蒟蒻 阅读(276) 评论(0) 推荐(0)
摘要:题意:求长度为N的序列中,最长的一个无重复元素的连续子序列。 解法:[L,R]每次R++或L++延伸就可以得到答案。 实现:(1)next[],last[]——O(n); 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #in 阅读全文
posted @ 2016-10-19 14:32 konjac蒟蒻 阅读(502) 评论(0) 推荐(0)
摘要:题意:N个等距村庄,买(>0)卖(<0)酒,供需平衡,运K则需K劳动力。问所需的最小劳动力。 解法:由于运出或运入1的都需经过2,所以无论如何,都可以等价于从2本身运入或运出。因此可以将1和2合并,2一定要运a1(小心:确保 i 的劳动力消耗量是由 i 之前,即 i-1 得到的),记a1+a2为现在 阅读全文
posted @ 2016-10-19 08:55 konjac蒟蒻 阅读(452) 评论(0) 推荐(0)
摘要:题意:有N张正在锅里的一叠煎饼,每张都有一个数字,代表其大小。厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即原来在上面的煎饼现在到了下面。要求设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小)。 解法:基本操作就是颠倒一个连续子序列。既然没有限制什么其他的条件,就一 阅读全文
posted @ 2016-10-18 15:06 konjac蒟蒻 阅读(240) 评论(0) 推荐(0)