第一問$lis$求出$s$。(用正常的$o(n^2)$的演算法,後面有用)
第二問首先動態規劃求出$f_i$,然後根據題意 「最多可取出多少個長度為s的不下降子串行」說明子串行的起點一定在$i$當且僅當$f_i=s$,終點在$j$當且僅當$f_j=1$。
又因為這是網路流24題每個數只能被選一次,
所以把每個數對應到點上,點要拆開為$$和$$,且$$要向$$連一條容量為$1$的邊,這樣能夠保證這個點只被流過一次即覆蓋一次,就能保證這個數隻被選一次。
對於所有的$x_i \leq x_j$且$f_i=f_j+1$,$i$到$$,容量為$1$。
然後設立超級源$$和超級匯$$,將$$向所有$f_i=s$的點$$連邊,容量為$1$,將所有$f_j=1$的點$$向$$連邊,容量為$1$。
求一遍$$到$$的最大流即可。
第三問就是如果有$$到$<1,a>$的連邊、$$到$$的連邊,將他們的容量改為$inf$再求最大流即可。
最長不下降子串行問題
前幾天看了關於動態規劃的內容,基本上講的都是最大不下降序列,所以第一次部落格 就寫這個東西了。給出一系列的數,給出乙個整數,即最長不下降子串行 code vs 1567 題解 先另創乙個陣列,用來記錄某乙個數到目前為止的最大長度,用for語句將所有元素遍歷 一遍就可以確定最長不下降子串行的長度了。比...
最長不下降子串行問題
題目建模很好 建模思路 byvoid dalao十年前的題解orz 問題分析 第一問是lis,動態規劃求解,第二問和第三問用網路最大流解決。建模方法 首先動態規劃求出f i 表示以第i位為開頭的最長上公升序列的長度,求出最長上公升序列長度k。1 把序列每位i拆成兩個點和,從到連線一條容量為1的有向邊...
最長不下降子串行
a1 t0 an a an 1 2 b an c d n 1 求該序列最長不下降子串行長度 n不是很大顯然可以暴力。n很大呢?那就不斷減迴圈節長度直至減到乙個閾值內,再暴力。正確性顯然,只要閾值不要設太小。include include include define fo i,a,b for i a...