题号 NC106366
名称 Minimizing maximizer
来源 poj1769
戳我进入往期每日一题汇总贴~
往期每日一题二期题单
如果你在题库做题时遇到了喜欢的题目,欢迎推荐给邓老师~ 点击查看详情
每日一题QQ群:659028468
题解
一堆排序器,每个可以把第l个数到第r个数这个区间里面的数从小到大排序,这些排序器按顺序运行,最后一个排序器运行完第n个数为第n小(最大数)。这些排序器去掉若干个也可以完成任务,问最少要留下几个,才能使留下的排序器依次运行使得对于任何输入最后一个排序器输出的最后一个数字为最大数。
思路:
因为只关心最大那个数,那么对于最大数来说每个排序器的作用是把它移动到他区间的最后。因为输入序列是任意的,要把最大的数字换到最后,我们可以假设最开始最大的数在第一个,那么运行每个最终选择的排序器他都会往后移动(不然这个排序器就没用),要做到这点,显然当前要选的排序器覆盖的区间需要和前一个选中的排序器覆盖的区间要有所重叠,且最后一定要覆盖到n这个点
f[i][j]表示前i个排序器使得最大值可以从第一个位置移动到第j个位置
显然:
min(f[i-1][k])是f数组上一行的区间最值,可以用线段树来维护。还可以压缩掉数组中i这一维(和大家题解里的一维状态殊途同归)。
欢迎各位大佬来做题写题解,也欢迎大家踊跃在当日讨论贴中提问!
活动奖励:
在牛客博客中写出题解,并回复地址
审核通过可获得(依据题目难度和题解的内容而定)
本道题目10月7日中午12:00之前写的题解有获得牛币资格~
牛客博客开通方式
- 如何开通牛客博客:https://www.nowcoder.com/discuss/202952
- 如何使用博客搬家功能:进入博客--->设置--->底部博客搬家
- 如果你对牛客博客有任何意见或建议:牛客博客意见反馈专贴
全部评论
(12) 回帖