[BZOJ4828][Hnoi2017]大佬(DP + 單調性)
阿新 • • 發佈:2018-11-23
Address
Solution
- 非常有意思的題
- 首先求出最多可以用多少天來打傷害
- 狀態: 表示要保證第 天的自信值至少為 ,則前 天內最多可以不刷題幾天
- 轉移非常顯然
- 求出 表示最多可以用多少天來打傷害
- 然後考慮打傷害
- 利用 BFS + 雜湊表預處理出一些二元組 構成的集合
- 這些二元組 的意義是可以用 天(包括升等級,提升諷刺能力,以及這 天的最後一天懟大佬, )使大佬的自信值降低
- 可以發現這樣的 數量是可以接受的
- 然後每個大佬分三種情況:
- (1)不懟大佬,只使用普攻。即判斷是否 。
- (2)懟一次大佬。即判斷是否存在一個二元組 滿足:
- ① (自信值不能為負數)
- ② (在剩下的至多 內使用普攻)
- (3)這也是重點:懟兩次大佬。
- 將所有的二元組按照 為關鍵字從小到大排序,然後列舉第一次懟大佬的二元組 ,然後這時候需要滿足的第二次懟大佬情況 需要滿足
- 先考慮第一個條件,顯然排序之後合法的 是一段字首並且隨著 的增大而減小。所以按照 倒序列舉二元組之後 two pointers 維護 合法的二元組字首即可
- 而對於第二個條件,移項後可得
- 設當前 合法的字首是第 個二元組到第 個二元組
- 那麼我們要做的就是在前 個二元組中找出一個最大 作為第二次懟大佬的結果
- 也就是這時候要判斷是否