AtCoder Beginner Contest 320


Round 10 : AtCoder Beginner Contest 320

一言:
当毫无寄托的两颗心紧挨之时,真正的悲伤开始展翅翱翔。
——空之境界

终于在 ABC 搞过了揭老汉啦!

F : Fuel Round Trip

首先不难想到一个二维的 dpi,j,表示走到了第 i 个点,剩余油量为 j 需要花费的最少的钱。

但是由于每个加油站只能用一次,所以这样的话就有后效性。

发现 n,k200,考虑再来一个状态。

既然过去和回来加起来只能选一次,那就考虑把两者都统计,定义 dpi,j,k 表示,正着走到 i 的剩余油量为 j,到 i 点时的剩余油量为 k,从 i 走到 n 的最小价钱之和。

显然,我们只需要枚举第 i 个点的油是不用,还是加给 j,或者是加给 k。想到这里应该就比较直观了,为了方便,可以考虑顺推。

Submission

G : Slot Strategy 2 (Hard)

非常容易想到去枚举最终的那个数字,但是我却没有想到可以二分答案。

然后我们考虑去判断。

可以考虑建立一个二分图,左边节点为每一行,(右边节点为时间),连向满足条件的时间(即这个时间转到的是最终数字)。最后看他的最大匹配是否是 n 即可。

但是这个 t 可能会比较大,导致右边节点与左部节点连的边的数目太多了。仔细思考可以发现,如果左部节点连的边超过了 n,那他显然是可行的,所以就不用去连更多的边了。故最终最多只有 n2 条边。

所以最终复杂度 n3lognm×10

Submission

What I learned:

  • 当每个数有可能正着倒着被预选,但他又只能被选一次,且你只能动态规划时,考虑 1n,in 的选数同时进行,定义 dpi,j,k 同时维护进行到的 i,以及正着和倒着的信息 j,k,转移的时候看 i 是给了正着,倒着,还是都没给分别转移即可。

  • 有单调性的题目一定不要忘了二分啊!

  • 当一个点需要连很多边来实现自己的算法,但是你发现当一个点建立了一定量的边之后他的答案已经已知了,那么对于他之后的边就不要建了,不然容易让算法的时空复杂度假掉。

  • 如果对于每一个东西他需要选一个时刻保证其合法,而每个东西选的时刻必须不一样,要看最多有多少个东西合法(或者能不能够让所有东西合法)时,考虑二分图,或者在其他扩展情况下,可以考虑网络流。

posted @   Saltyfish6  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
Document
点击右上角即可分享
微信分享提示