1. 程式人生 > >動態規劃優化

動態規劃優化

子序列 目標 [] 相等 復雜度 但是 表示 size 前綴和

bzoj2064 分裂

存在通解:把原始集合都合並,再一一拆開。

如果可以劃分一些集合,使得原始集合和目標集合對應的小集合相等,那麽可以節省操作次數。

ans=(n1-1)+(n2-1)-2*(x-1) x為劃分的相同集合數。

n<=10,狀壓

另外,其實原始集合一個x,就是往右x步,目標集合一個y,就是往左y步。

那麽,兩個個集合對應和相等,就是走出去再回來、

f[S1][S2]表示,原始集合選擇S1的元素,目標集合選擇S2元素,最多可以湊成幾個和相等的集合。也即能走多少個圈。

預處理集合對應的和。

轉移枚舉選擇哪個元素(原始或者目標)2n復雜度。

枚舉狀態2^2n

所以,O(20*2^20)

bzoj3173[TJOI2013]最長上升子序列

題目的特點是,從1~N從小到大加入。

當然可以平衡樹動態維護,但是不夠優美。

回憶LIS的狀態設計,f[]以i結尾LIS

那麽,對於一個x,比x大的y一定不會出現在f[x]的方案中。

所以,我們可以把最終的序列求出來,然後求f[1~n]

然後,逆序輸出,ansi,就是對權值為1~i的位置求f[]的最大值。

就是一個權值的前綴和。

至於求最終的序列,可以平衡樹。但是可以倒序,用樹狀數組即可。

動態規劃優化