贪心算法
文章平均质量分 63
流年冲淡时光
这个作者很懒,什么都没留下…
展开
-
cf437C 贪心算法
然而打死也没有想到用贪心,还是智商问题,智商是硬伤,也是忧伤。贪心,每条绳子都是需要割断的,那就先割断最大值对应的那部分周围的绳子。#include#include#include#include#include#include#include#include#include#include#include#include#define LL long long翻译 2015-05-20 22:12:47 · 709 阅读 · 0 评论 -
UVA10603倒水问题加优先队列
这题是一个倒水问题的变形,也是隐式图的搜索,刚开始读错题了,这题让求得是倒水量,而不是倒水的次数。然后这题要用优先队列,一旦搜到d,就退出搜索,因为是每次搜索得到新的状态都按照d进行了排序,所以一旦d的倒水量不为-1就可以退出,这里用优先队列不仅不用考虑状态的数组去开数组,而且这里必须有优先队列去优化时间,不然就会T,因为不用优先队列状态数目就太多了,对应杯子的水量相同,但是倒水量不同原创 2015-11-09 18:54:10 · 680 阅读 · 0 评论 -
CF591CF01串的变换,找规律
这题知道应该是一个规律题,然而并没有什么卵用,规律找不到,AC不了,前面俩题手速不够快,只能掉rating。说一下这题的规律:首先只有101和010会变化,很明显可以知道,然后开个数组,记录需要变化的位置,然后每一段需要变化的01串需要交换的次数为:len+1/2;然后变化的规律:若子串长度len为奇数,即首尾数字相同的,该子串变为同样长度,与首尾数字一致的串,如101原创 2015-10-26 18:59:46 · 567 阅读 · 0 评论 -
小白书贪心之乘船问题
俩个坐标了l,r标记最轻的和最重的,每次r往左移动,直到i和j可以坐同一艘船,然后l++,r--;#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1e6+10;const double eps=1e-5;i原创 2016-03-03 21:28:28 · 355 阅读 · 0 评论 -
小白书贪心之选择不相交区间
这里贪心的原则就是选择一个区间之后留出更大的空间,给后面的去选择,所以先按照右区间b从大到小排序,这里选择的代码也比较巧妙,通过平移右区间去进行选择,排除。#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1原创 2016-03-03 22:09:19 · 417 阅读 · 0 评论 -
小白书贪心之区间选点问题
本质上是和前面那个选择尽量多的区间,使的俩俩没有公共点一样的。#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1e6+10;const double eps=1e-5;struct node{ int原创 2016-03-03 22:37:04 · 427 阅读 · 0 评论 -
uVA311包裹包含
这题本来是个水题,但是我前面坐的是统计前面几个盒子能装下1X1盒子的数量,估计会超LL,我没改成LL,一直WA,然后我改成一边统计,一边比较,就A了。这里贴上代码,写的略微复杂:#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2016-03-11 22:58:57 · 375 阅读 · 0 评论 -
UVA714给出n个数分成m个部分,使和最大的最小
这题,小白书上有讲,所以当时也没多想直接二分,分完之后,发现有问题,他说前面的尽量小,这里就要贪心,从后面贪心,只要和值不大于二分的值就一直二分,然后发现还是不对,看了别人的,忽略了一个问题,二分的时候x的初始值不能是零,因为我写的判断二分的函数比较特殊,所以如果判断的值小于全部的数也能过,所以,这里x的初值注意取全部数的最大值。#include#include#include原创 2016-03-24 17:57:19 · 1932 阅读 · 0 评论 -
UVA10020用最少的线段去覆盖给定的线段
这题是个贪心,先把每条线段按照左端点进行排序,然后贪心,怎么贪呢,每次都找到最长的线段,记录下坐标,(如果某个坐标为负值,初始的为负值,即表示下面有一段断掉了,直接return 0)更新起点值,具体的看代码:#include#include#include#include#include#include#include#include#include#include#i原创 2016-03-13 22:29:18 · 935 阅读 · 0 评论 -
UVA10160在一个图中选择几个点,使得这些点加上相邻的点为这个图的顶点集
很明显爆搜一发肯定T,肯定要加剪枝,关键就在于你怎么样去剪枝,另外本弱刚开始想写一个搜索,竟然笨到这种情况不会还原vis标记数组,其实就是遇到加一,还原减一,而不是简单的等于0和等于1。然后讲一下剪枝,这里比较容易想到的一个剪枝就是搜索到某个状态站点数已经大于当前的最小站点数了,就不用继续搜下去了,就return。然而这只是一个很小的剪枝,并没有什么卵用,这里关键的剪枝在于:位向量原创 2015-10-08 22:02:57 · 566 阅读 · 0 评论 -
UVA10123木板上放石头使木板平衡,递归加强剪枝
渣渣表示物理没学好,读完题的第一感觉是题意读错了,又反复读了好几遍,才感觉没读错,只不过物理没学好,感觉取一个石头是不可能平衡的,然而是可以的,因为有俩个支点,又不是一个,然后怎样去保持平衡,以左边支点分析,右边支点忽略,如果左边的力矩大于右边的力矩加上1.5乘于木板的总重量,这里为什么要加这个东西,不理解,后来想了很久,另外咨询了我们班学霸,这里相当于把木板的总重量抽象为在木板中原创 2015-10-06 23:27:26 · 531 阅读 · 0 评论 -
Codeforces Round #324 (Div. 2) 数论乱搞过
可惜脑子不够快,手速也不够快,第二题想了好长时间才发现是一个很简单的规律,就是3^(3*n)-7*n;也就是每个位置都可以选一到三三个数,然后减去全部都是六的情况就行了,而且n为1的情况hint也给了,就很简单了,然而我还是想了半天。第三题构造题,也没什么说的。然后做第四题的时候已经没有时间了,可惜了,第四题表面上是一个数论题,然而其实乱搞就能过,没什么说的,不明白的看代码:#in原创 2015-10-07 16:14:28 · 355 阅读 · 0 评论 -
HNOJ13303字符串%3题
#include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const LL INF = 0x4ffffff;const double EXP =翻译 2015-07-25 18:53:36 · 487 阅读 · 0 评论 -
计蒜客430同一个节目的不同期竟然可以同时录制
做这个题的时候我一直在想同一个节目的不同期是否能够同时录制,然后就看到那句话在节目都连续录制的假设下,就把这句话理解成了同一个节目必须连续录制,而不能同时录制,然后就一直思考同一个节目不同时录制的情况下的最优解,就死在了这个问题上。后来看了题解竟然发现可以同时录制。然后这题就是枚举y,然后贪心,用z去弥补差值,然后比较每次解的大小,取最小。#include#include#翻译 2015-07-21 09:52:51 · 469 阅读 · 0 评论 -
CF574D消去n堆方格的次数
队友很随意的撸出来的,而且好像比题解的容易理解,鉴于队友不喜欢写博客,我帮他写下记录下,其实是我自己不会学习一下,感觉队友比我聪明,灵感比较多,他好像是直接计算出每一堆消去的最少次数,但是需要正反扫一次,然后找出全部的最大值即可,#include#include#include#include#include#include#include#include#includ原创 2015-08-31 14:12:05 · 424 阅读 · 0 评论 -
HNUOJ13302和13308贪心枚举有俩种情况的想办法直接枚举俩种情况每次枚举比较值
13302:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include翻译 2015-07-25 18:46:34 · 640 阅读 · 0 评论 -
CF581C用k去把n个数补成十的整数倍求最大
这题错的更是离谱,我想的好好的,然后代码敲上去,然后交了,竟然可以暂时通过,我也是醉了,而且过了20组数据,然后看了下我WA的代码,我cmp都写好了,竟然忘记sort一下了,一口鲜血吐出,加了一个sort分分钟AC,而且记得交之前我还看了下代码,竟然没发现我写的cmp没有用,这题就是先按照把每个数不成十的倍数需要的大小去排序,然后再从第一个数开始补,补齐的就加上这个补齐后的数字处于十,原创 2015-09-29 16:26:10 · 474 阅读 · 0 评论 -
HDU5495求俩个1~n的数列按照相同的规则重排后的LCS
这题智商低,想了很久没有想到怎么做,其实想通了很简单,由于俩个数列都是1~n的排列,所以在每个位置的a[i]和b[i]建一条边,然后通过样例可以很明显看出来,建边之后会形成n多个环,而每个环视相互独立的,对于长度大于1的每个环都可以以牺牲一个值得代价取得最长公共子串。总有那么些巧妙地题是我这种智商低的想不到的。#include#include#include#include原创 2015-10-04 03:22:07 · 838 阅读 · 2 评论 -
CF582A给出n个数的相互GCD,求这n个数,map的使用
反正比赛的时候没想到怎么做,主要应该还是智商问题,比赛的时候胡思乱想很久,没想到怎么做:其实也很简单:题意:由n个数,可以构成一个n*n的gcd矩阵 (每两个数之间)现在给你n*n个数(任意序),求出 矩阵对应的 n个数(任一合法答案)可知: 最大的数必然是要求的数。。。(不可能存在两个数的公约数是他)(如果最大的数有多个,那么MAX与MAX的公原创 2015-10-04 22:02:43 · 722 阅读 · 0 评论 -
CF582B一个数列重复n次求非递减序列
其实感觉这道题如果想的话也许比前面那道题还简单一些,一个简单DP,其实简单的DP就是贪心,首先这道题如果t所以这里面毕竟有重复,这个重复就是找出数字最多那个数字,然后重复t-n次,然后和n以内的最长的非递减序列相加就行了,具体的看代码:#include #include #include #include #include #include #include#incl原创 2015-10-05 18:20:52 · 804 阅读 · 0 评论 -
leetcodd之candy的前后扫描得结果
经典的模式,前后扫描即可得结果:class Solution {public: int candy(vector &ratings) { int n=ratings.size(); vector plus(n); for(int i=1,cur=1;i<n;i++){ if(ratings[i]>ratings[原创 2016-09-04 10:17:14 · 351 阅读 · 0 评论