贪心:
eg1.区间调度问题
n项工作,每项工作(x_i)开始,(y_i)结束,对于每项工作都可以选择参与与否,如果参与则中途不可以退出。参与工作的时间不可以重叠。问最多可以参加多少项工作。
题解:
线段覆盖。按结束时间升序排序后遍历查找选择即可。
证明:
要想选更多的任务,则需目前为止结束的时间最早,所以贪心正确。
eg2.合并果子
现在有n堆果子,第(i)堆有(a_i)个果子。现在要把这些果子合并成一堆,每次喝冰的代价是两队果子的总果子数,求合并所有果子的最小代价。
题解:
合并果子。每次选取最少的两堆果子合并,用优先队列维护即可。
eg3.POJ3253
给出n段木头长度l,求将一块长木头(长度为(Sigma l))分成这n段木头所需最小费用。每次切断木板时,需要的费用为原木板长度。
题解:
合并果子……一样的
eg4.POJ3069
在一条直线上,有n个点,坐标分别为(x_i)。从这n个点中选择若干个点,给他们加上标记,其距离为R以内的区域里必须有一个被标记的点。问至少要有多少点被加上标记。((1leq n leq 1000,0leq x_i,R leq 1000))
题解:
eg5.CF 12008
n列方块,每列有(h_i)个方块,你有一个袋子初始有m个方块,容量无限,你初始在第一列,你可以从当前所在列拿或放方块,如果(|h_i - h_{i-1}|leq k),你可以到下一列,问你能否到第n列。
题解:
贪心的拿补当前列使得(h_i = h_{i+1} - k)
eg6.洛谷 1080
给定n个二元组(<a_i,b_i>)和两个数(a_0),(b_0)。现在你需要将n个二元组排序,使得(max_{i=1}^n {frac{Pi_{j=0}^{i-1}}{b_i}})
题解:
国王游戏。
eg7.UVA11729
有n个人要去执行任务,所有人都需要你来交代任务,第i个人交代任务的时间为(b_i),了解完任务之后不间断的执行(j_i)分钟,求完成所有任务的最短时间。(两人不能同时交代任务,但可以同时执行任务)
题解:
(max{(Sigma_{j=1}^i b_j + j_i)})
交换两个相邻的人对其他人没有影响,所以先交代执行时间长的即可。讨论先i后j((max(b_i+j_i,b_i+b_j+j_j))与(max(b_j+j_j,b_j+b_i+j_i))),可得比较(j_i>j_j)排序即可