[洛谷P1484] 种树】的更多相关文章

洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1329957 题目链接地址: 洛谷P1484 种树 洛谷P3620 [APIO/CTSC 2007]数据备份(各大oj多倍经验) 照例吐槽 两道基本一模一样的题,只是第二道要差分顺便思维稍微向这边转化一下... 我觉得这两个题思维很不错啊!很\(Noip\ T2\)的样子... 话不多说将题解 贪心+堆优化 肯…
题目描述 cyrcyr今天在种树,他在一条直线上挖了n个坑.这n个坑都可以种树,但为了保证每一棵树都有充足的养料,cyrcyr不会在相邻的两个坑中种树.而且由于cyrcyr的树种不够,他至多会种k棵树.假设cyrcyr有某种神能力,能预知自己在某个坑种树的获利会是多少(可能为负),请你帮助他计算出他的最大获利. 输入输出格式 输入格式: 第一行,两个正整数n,k. 第二行,n个正整数,第i个数表示在直线上从左往右数第i个坑种树的获利. 输出格式: 输出1个数,表示cyrcyr种树的最大获利. 输…
题目类型:堆+贪心 传送门:>Here< 题意:有\(N\)个坑,每个坑可以种树,且获利\(a[i]\)(可以为负).任何相邻两个坑里不能都种树,问在最多种\(K\)棵树的前提下的最大获利 解题思路 第一眼觉得是\(DP\),但是数据太大\(NK\)显然不行-- 如果不约束相邻两个坑不能都种,那么显然是取最大的几个正数.只需排序求解即可 回到问题,一步一步分析吧. 假设\(K=1\),那么此时必然选最大的. 假设\(K=2\),可以选择最大的\(a[i]\),并且对于所有\(j \neq i-…
题面 这是一道标准的带反悔贪心: 利用大根堆来维护最大值: 当选择了num[i]后,反悔了,反之选择选了num[i-1]和num[i+1]时获利便增加了num[i-1]+num[i+1]-num[i]. 所以当num[i]被选时,我们就可以删去num[i-1]和num[i+1],并把num[i]改成num[i-1]+num[i+1]-num[i],放进堆中 #include <bits/stdc++.h> #define int long long using namespace std; ]…
传送门 解题思路 第一眼的贪心策略:每次都选最大的. 但是——不正确! 因为选了第i个树,第i-1和i-1棵树就不能选了.所以,要有一个反悔操作. 选了第i个后,我们就把a[i]的值更新为a[l[i]]+a[r[i]]-a[i]. 然后这样如果发现选i-1和i+1更优时,再次加上a[i],结果就变成了a[i]+a[l[i]]+a[r[i]]-a[i]=a[l[i]]+a[r[i]]. 然后这时再更新l[i]和r[i],把左边和右边两个节点删去. 因为每一次会比上一次多种一棵,所以循环k次,求一个…
https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1: 一个K^2的做法,有一定技巧 https://www.cnblogs.com/void-f/p/8867585.html 方法2: 是可撤销贪心的模板? 就是贪心的选权值最小的,但是在选完某一个位置i后把它前一个没有被删的位置pre[i]和后一个没有被删的位置nxt[i]删掉,将i的权值变为(-…
题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E,T.这三个数表示该居民想在B和E之间最少种T棵树.当然,B≤E,居民必须记住在指定区不能种多于区域地块数的树,所以T≤E-B+l.居民们想种树的各自区域可以交叉.你的任务是求出能满足所有要求的最少的树的数量. 写一个程序完成以下工作: 输入输出格式 输入格式: 第一行包含数据N,区域的个数(0<N≤…
P1250 种树 输入输出样例 输入 9 4 1 4 2 4 6 2 8 9 2 3 5 2 输出 5 PS: 我种最少的树,意味着我的树要最多的被利用,意味着,我的树要尽可能的靠中间种, 也就是我把右区间从小到大排序,如果区间树不够,就从右往左种 import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc =…
差分约束 差分约束的裸题,关键在于如何建图 我们可以把题目中给出的区间端点作为图上的点,此处应注意,由于区间中被标记的点的个数满足区间加法,这里与前缀和类似,对于区间[L..R]来说,我们加入一条从L-1指向R的边,边权为ci. 这样还不够,因为这样建下来的图是离散的,我们还需要去挖掘题目中的隐藏条件,我们可以发现,区间[L..L]的c值大于零小于一,所以我们可以加入adde(L-1,L,0);adde(L,L-1,-1); 按理来说差分约束的题需要构造一个源点以防图不连通,但由于本题的隐含条件…
一道看一眼就知道差分约束的题目 但是最短路spfa的时候注意松弛条件是 if(dis[u]+w[i]<dis[v[i]]) dis[v[i]]=dis[u]+w[i]; 不能写成 if(dis[u]+w[i]<=dis[v[i]]) dis[v[i]]=dis[u]+w[i] 否则会TLE 就是如何把\( a_{i}-a_{j} \ge t \),方法非常简单,只需要乘上-1 就可以愉快地变成\( a_{j}-a_{i} \le -t \)了 然后就是建立图. 瞪眼法可知我们可以使用类似前缀和…