CF div3 995 (A~G)
期末周之第三把网瘾(真是越来越放肆了...)。这次赛时了一把div 3 , 又一次只做出了A~E,写完E后剩下的题没时间看了(受了些寝室噪音的干扰,最后二十分钟才出)。赛后看了下F和G,感觉也是一时半会儿做不出来的题,遂来补题。
ABCD
这次前四题都很白给。ABC纯模拟题,D是枚举左端点二分右端点的典套路。
不过BC的总共5发罚时确实有点说不过去了,这个和当时寝室比较吵,注意力不集中的关系比较大。以后在寝室打CF时应该提高一下专注力了。
E
用了树状数组 + 离散化过的。感觉这道题挺不错的,需要一点点的思维和代码实现能力。
题意就是给定
首先有一个很关键的性质:钦定的单价
- 当这个数不超过其中的最大值时,一定可以把他扩大到比它大的且最接近于它的数。这样差评数和购买商品的数量都不会发生变化,合法性仍然保持的同时单价提高了,答案也会变得更优。
- 当这个数超过了其中的最大值时,显然没有商品会被购买,总价值为
。
故可以
我赛时的思路是分别枚举
枚举
将所有区间根据
枚举
和上面的比较类似。将所有区间根据
总复杂度
F
模拟 + 分类讨论,赛后看b站讲解后过的。
直接 在脑海中构想
- 当移动的牌不是Joker可能出现的位置时,Joker出现的位置一定是中间的一段连续区间。
- 第一次移动可能是Joker的牌时,牌的前缀与后缀会出现Joker。
- Joker出现的位置最多只会形成前缀,中间,后缀三段区间,证明不再赘述。
所以只需要维护三段区间的左右端点即可。前缀和后缀可以分别用
同时有一个坑点:第一次移动Joker时,若中间区间的长度为1,即只有一个Joker时,中间的区间会消失,即只会形成前缀和后缀两段区间,这个需要专门特判一下。当时自己在想这道题时除了这个坑点,其他的都没问题。还是得再细心一些。。。
G
状压
状态定义:
状态转移:
dp[state|(1<<j)][j + 1] = min(dp[state|(1<<j)][j + 1] , dp[state][i + 1] + g[i + 1][j + 1]);
其中编号为
预处理
首先每只蛇在未经移动操作时至少间隔1个格,故初始化为1。
之后的
哦对了,最后的答案应当取下式的最小值,而不只是
dp[(1<<n)-1][i] + move_front[i] , 1 <= i <= n
其中
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验