zoukankan      html  css  js  c++  java
  • 贪心

    第三讲:贪心
     • Sort
     • 堆:Priority_queue
     Heap.push(x);
     • 贪心:每次决策时选取当前意义下最优的策略,值选取当前最优
      错误例子:单源最短路
      不是所有问题都有效,要求整体最优性可以由局部最优性推导
      证明方法:反证法 数学归纳法 领项交换(证明交换两项不会更糟)范围缩放 举反例
     • Eg1:有n项工作,开始时间t1,结束时间t2,对于每项工作,你都可以选择参加与否,中途不能退出。参加工作时间不能重叠(开始和结束相同也不行)问最多可以参与多少项工作
     1<=n<=1e5 1<t1<t2<1e9
     题解:在可选时间中选择结束时间最早的 以结束时间排序
     • Eg2:合并果子(luogo1090)
     有n堆果子,每堆有ai个,现在要将这些果子合并成一堆,每次合并的代价是两堆果子的总数,求合并果子的最小代价。1<=n<=1e5,1<=ai<=2e4
     题解:直接排序选最小的
     • Eg3:给n段木头的长度L,求将一块长木头(长度为着n个木头长度之和)分n段木头所花的最小费用,每次切断木头时花费的代价是原木头的长度1<=n<=2e4,0<=l<=5e4
     题解:先截断最大的
     • Eg4:在一条直线上有n个点,坐标分别为xi,从中选取若干个加上标记,对于每一个点,其距离是r以内的区域里必须有一个被标记的点。问至少要有多少点被加上标记1<=n<=1e3
     0<=xi,r<=1e3
     题解:分为子问题,去看第二个的圆里有没有第一个,如果有就往下走,知道第a个没有第一个,标记第a-1个,然后往右最不能包含的再次重复这个过程
     • Eg5:n列方块,每列有hi个方块,你有一个袋子初始有m个方块,容量无限,你初始在第一列,你可以从当前列拿或放方块,如果abs(hi-hi+1)<=k你可以到下一列,问你能否到第n列
     题解:在满足条件的情况下让每列都尽量的少
     • Eg6:国王游戏
     给n个二元组(ai,bi)和两个数a0,b0,现在你需要的将n个二元组排序(既不包括a0,b0),使得$max_{i=1}^n {frac{Pi_{j=0}^{i-1}}{b_i}}$ 1<=n<=1e3 0<=a,b<=1e5
     题解:考虑第i个和i+1个分数的值,交换两项会使结果变差,化简式子
     • Eg7:刘禅的课程
     题解:
     • Eg8:有n个物品,每个物品大小为ai,将物品放入大小为m的箱子里,每个箱子最多放两个,问至少需要几个箱子。
     题解:排序
     • Eg9:给一个字符串表示的非负整数num,移除k个数,使得到的数字最少。Num<1e4+2不会包含任何前导零
     题解:比较左边和右边的大小,小于就留下
     • Eg10:有n个人要去执行任务,所有人都要你来交代任务,第i个人完成任务交代任务需要的时间为bi,了解完任务之后会不间断的执行任务ji分钟任务,完成所以任务的最短时间,两个人不能同时交代任务,但可以同时执行任务。
     题解:bi的和加上ji,考虑交换两个人的顺序,对前后的人没有影响,优先交代执行时间长的,比较4个值,先i后jmax(bi+ji,bi+bj+jj)先j后imax(bj+jj,bj+bi+ji)

  • 相关阅读:
    day23-json、pickle、configparser、hashlib、suprocess模块
    day22-时间模块、random模块、os模块、sys模块
    day21-py文件作用,导包、模块搜索路径
    day20-python-二分、面向过程思想、函数式、模块
    day19-python-叠加装饰器分析、yield、三元、生成式、递归
    day18-python-装饰器、迭代器、生成器
    day17-python-装饰器
    day16-python-函数对象、函数嵌套、闭包函数
    搭建yum本地源_阿里云CentOS服务器初始化设置
    ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql 启动不了
  • 原文地址:https://www.cnblogs.com/lllllllm/p/12186339.html
Copyright © 2011-2022 走看看