
贪心
秘制函数
记录学习算法的过程
展开
-
Acwing111. 畜栏预定(贪心)
【代码】Acwing111. 畜栏预定(贪心)原创 2022-10-04 22:24:44 · 306 阅读 · 0 评论 -
AcWing 1353. 滑雪场设计(贪心+枚举)
思路:最优解的所有山峰高度一定在一个长度为17的区间内,枚举所有可能为最优解的区间,每个区间都用贪心算出最少花费。#include<bits/stdc++.h>using namespace std;int arr[1010];int main(){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>arr[i]; int res=0x3f3f3f3f; for(int i=0;i<=83;i++){原创 2022-04-20 22:50:04 · 315 阅读 · 0 评论 -
AcWing 143. 最大异或对(trie+贪心)
#include<bits/stdc++.h>using namespace std;const int N=100010,M=N*31;int son[M][2],idx,a[N];void add(int x){ int p=0; for(int i=30;i>=0;i--){ int t=x>>i&1; if(!son[p][t]){ son[p][t]=++idx; } p=son[p][t]; }}int sea.原创 2022-04-12 10:31:16 · 111 阅读 · 0 评论 -
AcWing 4397. 卡牌(贪心)
思路:相当于交换两个序列的位置,以数列a为所求数列,若数列b某个位置的值小于数列b同样位置的值,则考虑交换此位置的值,因为交换次数有限制,所以优先交换 <<交换价值大的>>#include<bits/stdc++.h>using namespace std;const int N=200010;typedef pair<int,int> pii;int a[N],b[N];int n,k;priority_queue<pii>原创 2022-04-11 18:26:31 · 217 阅读 · 0 评论 -
acwing.最长上升子序列Ⅱ(贪心)
#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ int n; cin>>n; vector<int> arr; for(int i=1;i<=n;i++){ int x; cin>>x; if(arr.empty()...原创 2022-03-07 00:22:15 · 79 阅读 · 0 评论 -
?acwing.【区间覆盖】(区间问题)
不知道为啥,最后一组数据(超时)说啥也过不去。#include<iostream>#include<vector>#include<queue>#include<algorithm>using namespace std;struct qujian{ int l,r; bool operator<(const qujian &w)const{ return l<w.l; }};qujian quj[10001原创 2022-03-02 15:07:30 · 71 阅读 · 0 评论 -
acwing.【货仓选址】(贪心)
若商店总数为偶数,则建在中间两个仓库的任意位置。若商店总数为奇数,则建在中间仓库的位置。#include<iostream>#include<algorithm>using namespace std;int arr[100010];int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i]; } sort(ar原创 2022-03-01 23:50:15 · 159 阅读 · 0 评论 -
acwing.【合并果子】(贪心)
最优二叉树(霍夫曼树)的应用#include<iostream>#include<queue>using namespace std;int main(){ int n; cin>>n; priority_queue<int,vector<int>,greater<int>> a; for(int i=1;i<=n;i++){ int x; cin>>x; a.push(x);原创 2022-03-01 23:34:29 · 185 阅读 · 0 评论 -
acwing.[区间合并](贪心)
思路:把区间按左端点从小到大排序,依次遍历每个区间,若当前遍历的区间的左端点小于所有已经出现的组的值(若没有组则直接新加入一组,其值为此区间的右端点),则新加入一组,其值为此区间的右端点;若当前遍历的区间的左端点大于已经出现的组的某个组的值,就把这个组的值更新为此区间的右端点。先来解释一下为什么要左端点的值从大到小排序。理解之后,先来看一份超时(思路是正确的!!)代码,因为它容易理解。#include<iostream>#include<vector>#in原创 2022-02-28 23:09:01 · 130 阅读 · 0 评论 -
acwing.【最大不相交区间数量】(贪心)
和区间选点思路相同区间选点#include<iostream>#include<algorithm>using namespace std;struct qujian{ int l,r; bool operator<(const qujian &w)const{ return r<w.r; }};qujian quj[100010];int main(){ int n; cin>>n; for(int i=0;i&l原创 2022-02-28 17:37:21 · 135 阅读 · 0 评论 -
acwing.【区间选点】(贪心)
思路:先把所有区间按右端点从小到大排序,依次遍历排好序的区间,如果当前区间左端点的值大于或等于上一次选出点的值,那么此区间已经满足至少包含一个点,不用添加新的点;如果当前区间左端点的值小于上一次选出的点,说明此区间内没有包含点,则更新点的值为此区间的右端点,点的总数加一。1.为什么要按右端点排序?若按左端点排序不能达到最优解(选择的点最小)。例:[1,4][3,7][5,6],若按左端点从小到大排序后遍历,到最后会选择三个点;若按右端点,到最后只会选择两个点。2.为什么每次更新点的值为当前遍历区原创 2022-02-28 16:07:36 · 351 阅读 · 0 评论