随笔分类 -  算法效率

摘要:题意:给定4个N元素几个A,B,C,D,要求分别从中选取一个元素a,b,c,d使得a+b+c+d=0。问有多少种选法。(N≤4000,D≤2^28) 解法:首先我们从最直接最暴力的方法开始思考:四重循环O(n^4)枚举;三重循环枚举,把剩下的一个集合排序后二分查找,O(n^3 log n)。在进一步 阅读全文
posted @ 2016-11-08 16:47 konjac蒟蒻 阅读(311) 评论(0) 推荐(0)
摘要:P.S.我完全一个字一个字敲出来的血泪史啊~~所以,没有附代码,也是可以理解的啦。OvO 题意:给一个长度为N(N≤200000)的序列,要删除一个连续子序列,使得剩下的序列中有一个长度最大的连续递增子序列,输出其长度。 解法:(参考自紫书)1.X 暴力枚举删除的区间 [l,r],O(n^2),再数 阅读全文
posted @ 2016-11-04 19:34 konjac蒟蒻 阅读(359) 评论(0) 推荐(0)
摘要:如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现。下面介绍几个经典贪心问题。(参考自刘汝佳著《算法竞赛入门经典》)。P.S.下文皆是我一个字一个字敲出来的,绝对“童叟无欺”,哈哈。(。⌒∇⌒) 耗费了我的很多时间,所以——希望对大家有帮助啊~ (=^‸^=) 一、背包相关 阅读全文
posted @ 2016-11-03 21:27 konjac蒟蒻 阅读(4980) 评论(0) 推荐(1)
摘要:题意:要求在一个N*N的棋盘上放N个车,使得它们所在的行和列均不同,而且分别处于第 i 个矩形中。 解法:问题分解+贪心。 由于行、列不相关,所以可以先把行和列均不同的问题分解为2个“在区间[1,n]中选择n个不同的整数,使得第 i 个整数在[Li,Ri]内”的问题。 接下来的贪心很重要:先使区间R 阅读全文
posted @ 2016-11-03 20:49 konjac蒟蒻 阅读(232) 评论(0) 推荐(0)
摘要:题意:有一个由N个片段构成宽度的洞穴,已知洞顶 si 和洞底 pi 的高度,要求储存尽量多的燃料。 解法:O(n),分别从1到N和从N到1扫一遍,调整每个片段合法的最大高度,求出答案。 阅读全文
posted @ 2016-11-03 19:02 konjac蒟蒻 阅读(356) 评论(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。第 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)
摘要:题意:给3个数M,A,B,求两个质数P,Q。使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大。输入若干行以0,0,0结尾。 解法:先线性筛出素数表,再枚举出P,二分出对应的最大的Q,得出最佳答案。 注意——1.第二个的代码是标准的欧拉筛,可求每个数的最小质因数; 2. 像第一个代码二分时 阅读全文
posted @ 2016-10-30 18:50 konjac蒟蒻 阅读(418) 评论(0) 推荐(0)
摘要:题意:若干组数据,分别问 N划分成K个正整数之和的划分数目、N划分成若干个不同正整数之和的划分数目、N划分成若干个奇正整数之和的划分数目。 解法:请见我之前的一篇博文内的Article 2——【noi 2.6_8787】数的划分(DP){附【转】整数划分的解题方法} http://www.cnblo 阅读全文
posted @ 2016-10-27 17:00 konjac蒟蒻 阅读(594) 评论(0) 推荐(0)
摘要:题意:问正整数n的所有划分个数。 解法:f[i][j]表示划分 i 后的每个数不大于 j 的划分数。分情况讨论:划分中每个数都小于 j,相当于每个数不大于 j- 1, 故划分数为 f[i][j-1] 或 划分中至少有一个数为 j. 相当于把剩下的 i-j 进行划分,每个数不大于j, 划分数为 f[i 阅读全文
posted @ 2016-10-27 15:06 konjac蒟蒻 阅读(691) 评论(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)
摘要:题意:问蛇形回文的访问次序。 解法:很基础的一道题,先算出询问的点处在第几环,再用4个while一个个走一遍这一圈。P.S.我一直想办法想用不用while(),可是真的一直WA!所以用while()既方便又准确,不要小瞧她。 P.P.S.本蒟蒻刷DP刷累了(不会做~(┬_┬)),便来做这题,可惜耗时 阅读全文
posted @ 2016-10-18 07:53 konjac蒟蒻 阅读(582) 评论(0) 推荐(0)