【考试】list2

知识点

  • 1.不下降子序列最小个数等于最大上升子序列的长度
  • 2.反悔贪心有两种思路,换效果最差的一个,开优先队列多次替换
  • 3.可以开多个数组记录中间答案,可以实现复杂度的降低
  • 4.贪心可以转化成模型(分纸牌)
  • 5.dp和贪心加和

题目

1.邮票 Stamps

给一组 n 枚邮票的面值集合和一个上限 k —— 表示信封上能够贴 k 张邮票。请求出最大的正整数 m,满足 1 到 m的面值都可以用不超过 k 张邮票表示出来。

  • 背包的体积表示:f[i],表示出i的面值最少用多少张邮票

2.木棍加工

  • 先以第一关键字(长度)排序,然后求要求不下降子序列的最小个数,就是最长上升子序列的长度

3.种树

每个居民都想在门前种些树,并指定了三个号码 b,e,t。这三个数表示该居民想在地区 b 和 e 之间(包括 b 和 e)种至少 tt棵树。

  • 可以用差分约束
  • 贪心,要种树种得少,就要使一棵树给多个区间使用,这样,尽量在重叠区间种树即可,而重叠位置一定是区间尾部。处理问题时,先按所有区间的结束位置从小到大排序,若结束位置相同,则按开始位置从大到小排序。之后依次处理每个区间,先在第一个区间尾部种满足要求的树,对下一个区间,看差多少棵就在该区间尾部种多少。
  • 开vis数组,标记每一个地方有没有种树,在每一个区间内从后往前种树

4.钓鱼

  • 我们可以先确定可以走到的最远的鱼塘i,然后把时间减去从鱼塘1走到鱼塘i的时间,在剩下的时间里一直钓鱼,可以假设钓鱼人可以瞬间移动,在鱼塘1到鱼塘i之间采用上面的贪心方法,就可以求到最远走到鱼塘i的最优解。
  • 我们设在池塘i花了k个单位时间钓鱼,从池塘i-1走到池塘i要花t[i-1]的时间。那么opt[i][j]就等于opt[i][j-t[i-1]-k](即到上一个池塘花j-池塘i-1到池塘i的时间-k的单位时间的最优解)加上在池塘i花k个单位时间钓到的鱼,那么就可以得到

o p t [ i ] [ j ] = m a x o p t [ i − 1 ] [ j − t [ i − 1 ] − k ] + k ∗ f [ i ] − d [ i ] − 2 ∗ d [ i ] − 3 ∗ d [ i ] − … − ( k − 1 ) ∗ d [ i ] opt[i][j]=max{ opt[i-1][j-t[i-1]-k]+k*f[i]-d[i]-2*d[i]-3*d[i]-…-(k-1)*d[i] } opt[i][j]=maxopt[i1][jt[i1]k]+kf[i]d[i]2d[i]3d[i](k1)d[i]

5.[NOIP2015 普及组] 推销员

  • dp很好推(半区间dp)
  • 贪心,舍去前i个中,价值最小的,换位后面距离更远的,只需舍去最小值来走更远,无需舍去更多数来走更远。

6.[NOIP2013 普及组] 车站分级

-topo排序,点少的时候,邻接表判断重边显然较快

7.Work Scheduling G

对于第 i 个工作,有一个截止时间 D i D_i Di,如果他可以完成这个工作,那么他可以获利 P i P_i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值