CF436E - Cardboard Box 题解
只讲贪心做法。
一、反悔贪心
考虑如何使选的星星总数多一。显然,有如下几种方式:
-
选一个之前没选过的位置
,答案加上 。 -
选一个之前选过一次的位置
,答案加上 。 -
对于一个之前选过一次的位置
,再找到一个没有选过的位置 ,反悔掉 ,并选两次 ,答案加上 。 -
对于一个之前选过两次的位置
,再找到一个没有选过的位置 ,反悔掉 的第二次选择,并选两次 ,答案加上 。
总结一下,我们需要分别维护
时间复杂度
二、直接贪心
考虑每次选两个星星,那么我们需要权衡的是选
定义:
开两个堆,存储
-
记录每个数是作为
物品被扔掉还是 物品。然后对于每个堆,把所有不合法的扔掉。 -
取出
堆的最小值和次小值 和 堆的最小值 (若不存在视为 )。 -
若
:记录下每个数被选的次数,令 对应的 ,并标记为作为 物品使用。若此时 ,说明选择的是 ,再将 扔进去。然后把 扔回去(如果是 ,忽略)。 -
否则:使用
,设置其 ,作为 物品被使用。然后将 塞回去。
这样选择方案就输出
但是这样做有一个问题:如果
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现