牛客 CCA的区间 dp + 补集转移
生活随笔
收集整理的這篇文章主要介紹了
牛客 CCA的区间 dp + 补集转移
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送門
文章目錄
- 題意:
- 思路:
題意:
思路:
首先翻轉一個區間意味著可以將任意兩段不相交的區間組合,所以問題變成了選兩端不相交的區間,使得合并后區間和最大。那么我們就處理出來區間,讓后進行轉移即可。
設dp[i]dp[i]dp[i]表示iii的二進制子集中的最大值,答案就是i+dp[ixorbase]i+dp[i\ \ xor \ \ base]i+dp[i??xor??base]。
現在問題是怎么快速的求出來dp[i]dp[i]dp[i]。我們可以從小到大遍歷一遍,讓后依次把當前數的一位二進制為111的位置換成000,讓后對于每一位取一次最小值,即dp[i]=max(dp[i],dp[ixor(1<<j)])dp[i]=max(dp[i],dp[i\ \ xor \ \ (1<<j)])dp[i]=max(dp[i],dp[i??xor??(1<<j)]),jjj從000到222222,這樣就可以預處理出來dp[i]dp[i]dp[i]了,具體實現可以看代碼。
總結
以上是生活随笔為你收集整理的牛客 CCA的区间 dp + 补集转移的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #60
- 下一篇: Linux进程(linux进程管理及进程