Educational Codeforces Round 81 (Rated for Div. 2) E. Permutation Separation 线段树 + dp
傳送門
 
文章目錄
- 題意:
 - 思路:
 
題意:
給你一個打亂的排列,每個位置都各有一個價值,讓你選擇一個分界點,分成p1,p2,...,prp_1,p_2,...,p_rp1?,p2?,...,pr?和pr+1,...,pn?1,pnp_{r+1},...,p_{n-1},p_{n}pr+1?,...,pn?1?,pn?,兩部分非空,可以將某一邊的數花費代價aia_iai?移動到另一邊,當左邊所有數都小于右邊或者某一邊為空的時候,符合條件,求符合條件的時候的最小代價。
思路:
先考慮暴力怎么寫。
 定義f[i][j]f[i][j]f[i][j]表示以iii為分割點,[1,i][1,i][1,i]在左邊,[i+1,n][i+1,n][i+1,n]在右邊,讓后通過移動使得a[1,i]<=j,a[i+1,n]>ja_{[1,i]}<=j,a_{[i+1,n]}>ja[1,i]?<=j,a[i+1,n]?>j的最小代價是f[i][j]f[i][j]f[i][j],初始狀態f[0][k]=∑i=1kbif[0][k]=\sum _{i=1}^{k}b_if[0][k]=∑i=1k?bi?(注意bbb是排序后iii這個位置的花費),轉移也比較好寫了:f[i][k]=f[i?1][k]?a[i]k∈[p[i],n]f[i][k]=f[i-1][k]-a[i] \ \ k\in [p[i],n]f[i][k]=f[i?1][k]?a[i]??k∈[p[i],n]f[i][k]=f[i?1][k]+a[i]k∈[1,p[i]?1]f[i][k]=f[i-1][k]+a[i] \ \ k\in [1,p[i]-1]f[i][k]=f[i?1][k]+a[i]??k∈[1,p[i]?1]
 對于第一個方程的解釋為當k∈[p[i],n]k\in [p[i],n]k∈[p[i],n]的時候,原本iii需要花費a[i]a[i]a[i]移動到左邊,但是由于分割點右移,所以不需要花費a[i]a[i]a[i],所以應該減掉。
 對于第二個方程解釋為當k∈[1,p[i]?1]k\in [1,p[i]-1]k∈[1,p[i]?1]的時候,原本iii不需要花費a[i]a[i]a[i]到右邊,因為本來就在右邊,但是分割點右移之后他到左邊了,所以需要花費a[i]a[i]a[i],應該加上。
 但是這個方程的轉移是O(N2)O(N^2)O(N2)的,我們考慮用線段樹來實現區間加,讓后維護一個minminmin,最后直接取tr[1].mintr[1].mintr[1].min即可。
總結
以上是生活随笔為你收集整理的Educational Codeforces Round 81 (Rated for Div. 2) E. Permutation Separation 线段树 + dp的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 苹果泡酸奶有什么功效
 - 下一篇: 吉利银河 E8 性能表现曝光:外媒 KM