#寒假集训[20200113]
贪心:
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以内的区域里必须有一个被标记的点。问至少要有多少点被加上标记。(\(1\leq n \leq 1000,0\leq 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\)排序即可