首页 > TAG信息列表 > P1484

洛谷P1484:种树(反悔贪心)

解析 反悔贪心好题。 我放弃wqs二分做法好吧。 要加强从边界和特殊情况入手思考问题的思想。 考虑选一个的时候,肯定是选最大值。 此时它两侧的值就不能选了。 那如果我后来不选这个最大值了,必然是我转而把它两侧的值都给选了,额外消耗一次代价,多获得了

洛谷 P1484 种树 (反悔贪心,双向链表)

题意:有\(n\)个数,选\(k\)个数使得它们的和最大,选完某个数后,其相邻两个数不能再选. 题解:将所有数放到大根堆里,用双向链表来存顺序关系,对于堆顶的\(a_i\)来说,我们如果选了它,\(a_{i-1}\)和\(a_{i+1}\)就不能再选,但是\(a_{i-1}+a_{i+1}\)可能比\(a_i\)大,我们先不管,先

P1484 种树

链接:Miku --------------------------------- 对顶堆做法 --------------------------------- #include<iostream> #include<cstdio> #include<algorithm> #include<queue> using namespace std; priority_queue <int,vector<int>,greater<

P1484 种树(堆)

堆优化的贪心,考虑种一棵树的最大收益,种了当前树两旁的树之后的收益为a[i-1]+a[i+1]-a[i] 用双向链表维护住左右关系,大根堆则可以“反悔”,维护另一个记录某个坑能不能种树的数组即可 代码: #include <bits/stdc++.h>#define int long long#define sc(a) scanf("%lld",&a)#define sc

P1484-种树

1 #include <bits/stdc++.h> 2 #define _for(i,a,b) for(int i = (a);i < b;i ++) 3 #define _rep(i,a,b) for(int i = (a);i > b;i --) 4 #define INF 0x3f3f3f3f 5 #define MOD 1000000007 6 #define pb push_back 7 #define maxn 500003 8 typedef long long