随笔分类 - 基本算法:贪心
证明方法:
1.临项交换
2.决策包容性
3.范围扩大
4.反证法和数学归纳法
摘要:哈夫曼树: 最小化权值与距离的乘积和 对于形如 的形式,都可以考虑采用哈夫曼树来贪心 荷马史诗 哈夫曼树和trie树结合考察 两者有相似的性质, 并且满足哈夫曼树要求的条件 int main() { n=read(); k=read();
阅读全文
摘要:每个商品有收益p和时限d 求时限内的最大收益 法一: 当从前向后贪心的时候 可能会出现反悔的情况 这样局部最优解和全局最优解有不一致. 为了解决反悔问题,我们可以采用倒序贪心的方式 int main() { while(scanf("%d",&n)!=EOF) { while(q.size()) q
阅读全文
摘要:给定一个序列 求其中最小的k个的和(这k个数任意两个不能相邻) 从k=2的时候出发: 发现要么选择最小的,要么选择最小元素两边的 用类似数学归纳的方式不断进行这种操作 设置一种反悔贪心 价值作为两边的价值减去中间的价值 #include <iostream> #include <cstdio> #i
阅读全文
摘要:给定一颗树 每个几点上有个权值val[i], 求的最小值 cnt是染色次数 关键在于两个性质: 全树种权值最大的点 一定在父节点被染色之后被染色 我们比较一下染色最大点x和其他k个点 如果染色k个点 造成负面影响: 如果染色x 造成的负面影响
阅读全文
摘要:给定n个线段 求最少设立多少个点 能够让每个线段上都有一个点 在左端点建立,维护右边界 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define ll
阅读全文
摘要:2. 畜栏预定 给定n个线段 每个位置可以存一个线段 最少多少个位置存现段让各个线段不存在交集 int main() { n=read(); q.push( (Node){0x3f3f3f3f,0} ); for(rint i=1;i<=n;i++) p[i].l=read(),p[i].r=rea
阅读全文
摘要:1. 防晒 给定若干个线段和若干个点 让每个点属于一个线段的匹配数目最大 贪心策略 按照左端点降序排序,每次选取能够用的中间最大的 如果是按照左端点升序排列,那么可能会出现下面线段包住上面线段的情况 我们要求的策略是: 对于当前线段内的每一个点 要么只有当前线段能用 要么两个都可以用 bool cm
阅读全文