• #寒假集训[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以内的区域里必须有一个被标记的点。问至少要有多少点被加上标记。((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)排序即可

  • 相关阅读:
    WC2020「Illusory」
    WC2015-2019
    Java基础——数组
    Java基础——Java基础语法和使用
    完善README——MarkDown模板[EN]
    完善README——MarkDown模板[CN]
    完善README——Markdown语法概要总结
    Java基础——Java如何导入本地项目
    Java基础——Java的历史以及平台应用
    AndroidSDK——和风天气使用初体验
  • 原文地址:https://www.cnblogs.com/mrha/p/12185634.html
Copyright © 2020-2023  润新知