随笔分类 - 贪心算法
基础算法
摘要:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G #include<bits/stdc++.h> using namespace std; typedef struct AVLTreeNode{ int key; int height;
阅读全文
摘要:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G这是一道贪心算法的题目,用BST维护有序性,每次取最小值,并删除,取两次合并为新的一堆,进行n-1次,这样就合并为一堆了统计过程每一次的大小。指针版 #include<bits/stdc++
阅读全文
摘要:P4447[AHOI2018初中组]分组 #include<bits/stdc++.h> using namespace std; map<int,int> m; int ans=101000; void rule(int n) { while(n>0) { int tj=0; map<int,in
阅读全文
摘要:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G这是一道贪心算法的题目,每次选择两个最小的堆,合并后,继续直到只有一堆为止,可能用multiset进行维护。 #include<bits/stdc++.h> using namespace
阅读全文
摘要:P6832 [Cnoi2020]子弦分析单个字符的子串中出现次数最多的一定是所有子串中出现次数最多的。统计每个字符出现的次数,并取最大值。 #include<iostream> #include<cstring> #include<cstdio> using namespace std; int a
阅读全文
摘要:P3742 umi的函数分析逐一对比两个字符串中对应的字符x[i]<y[i]时,z[i]无解,x[i]=y[i]能取z[i]>=x[i],x[i]>y[i]时,只能取z[i]=y[i]。 //P3742 umi的函数 #include<iostream> #include<cstring> usin
阅读全文
摘要:P2676 [USACO07DEC]Bookshelf B 分析按身高大高到低取到大于书架高度时,这时所需要的数量。 #include<iostream> #include<algorithm> using namespace std; const int Maxn=20001; int a[Max
阅读全文
摘要:P2356 弹珠游戏分析对于某个位置为0的所在行和所在列求和,并求最大值,本题的关键如何快速求是这n*n(最多10000)个值,在输入时预处理每行每列敌人的数量。 #include<iostream> using namespace std; const int Maxn=1010; struct
阅读全文
摘要:P1181 数列分段Section I 分析尽可能的对每个区间求和直到超过M后,重新统计,并计数加1。 //P1181 数列分段Section I #include<iostream> using namespace std; int a[100000]; int main() { int n,m;
阅读全文
摘要:P1614爱与愁的心痛 分析:共计n-m+1个连续区间,从这n-m+1个数中取最小值。问题转为如何求这n-m+1个数,可以用前缀和进行优化。 //P1614爱与愁的心痛 #include<iostream> #include<algorithm> using namespace std; int a
阅读全文
摘要:P4447 [AHOI2018初中组]分组题解在数轴上统计各个实力值出现的次数。我们要研究如何使人数最少的组别人数最大——也就是如何使长度最短的线长度最大。不妨令每一次画线都从最左边一列开始。每次都画到底,可以吗?显然,大多数情况下这不是最优解。最后可能会剩下一个方块“一枝独秀”:出现这种情况的根本
阅读全文
摘要:P4995 跳跳!贪心思想,在石头中最大和最小来回跳。 #include<bits/stdc++.h> using namespace std; int main() { vector<int> h; int n; cin>>n; for (int i=1;i<=n;i++) { int x; ci
阅读全文
摘要:P2240 【深基12.例1】部分背包问题按价值比从大到小排序,每次选择价值比大的全部物品,或按比例选取部分物品直到背包为空为止。 #include<bits/stdc++.h> using namespace std; struct node{ int zl; int jz; bool opera
阅读全文
摘要:P1478 陶陶摘苹果(升级版)由于要摘到最多的苹果,所以先选择摘一个苹果需要的力气 小的苹果。 //P1478 陶陶摘苹果(升级版) #include<iostream> #include<algorithm> #include<vector> using namespace std; struc
阅读全文
摘要:P1094 [NOIP2007 普及组] 纪念品分组如果当前的最小物品+最大物品不超过上限,这两个物品合并,如果不行最大物品只能单独为一件不能与其它的任何一个合并,这样合并最后就是最少的分组。本题用到的知识点有,排序,双指针,贪心思想。 //P1094 纪念品分组 #include<iostream
阅读全文
摘要:P1115 最大子段和 /* P1115 最大子段和 */ #include<cstdio> #include<iostream> using namespace std; int main() { // freopen("p1115_2.in","r",stdin); int ans; int s
阅读全文
摘要:P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G这是一道贪心算法的题目,每次选择两个最小的堆,合并后,继续直到只有一堆为止,可能用优先队列进行维护。 #include<bits/stdc++.h>using namespace std;i
阅读全文
摘要:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。算法思路贪心算法一般按如下步骤进行: ①建立数学模型来描述问题。②把求解的问题分成若干
阅读全文