poj1631 dp,最長上公升子串行

2022-05-01 18:09:10 字數 716 閱讀 6239

題目描述:

給你兩列點,共2n個

對於1~n著n個數,每個數給定乙個對應的數xi,表示左邊的點i與右邊的點xi相連,求問這些連線中,最大的不交叉的連線數量

可以觀察樣例

我們可以發現,滿足不交叉這一條件的必要條件是對於i所以,我們就可以發現,這是一道最長上公升子串行的問題

因為資料範圍是n<40000,所以要用nlogn的二分搜尋lis

可解附上**:

1 #include2 #include3 #include4 #include5

using

namespace

std;

6int up[50000];7

int down[50000];8

int port[50000];9

intn;

10const

int inf=9999999;11

intsolve1()

1218

return lower_bound(up,up+n,inf)-(up);19}

2021

intmain()

2229

//cout<30

31 cout

33 }

view code

Dp 最長上公升子串 最長上公升子串行

乙個數的子串bi,當b1 b2 bs的時候,我們稱這個子串是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串 ai1,ai2,aik 這裡1 i1 i2 ik n。如 對於序列 1,7,3,5,9,4,8 有它的一些上公升子串,如 1,7 3,5,9 等等。這些子串中最長...

poj 1631 最長上公升子串行 nlogn

題目挺長的,就是說 一開始 有一些連線,左邊1 n 跟右邊 1 n 相連,現在要你 刪除一些連線,使得剩下的連線最多,並且剩下的連線不相交。其實就是求最長上公升子串行 但是 n 的範圍 是 40000,n 2 的演算法是不行的,需要 nlogn的演算法。演算法分析,我們可以維護乙個 c陣列,這個c陣...

poj2533 最長上公升子串

題目大意 給你乙個字串,你要從裡邊找到最長的子串的長度,且這個子串必須是公升序。解題思路 dp 狀態變數 d i 以i結尾的最長上公升子串的長度 狀態轉移方程 d i max d i d j 1 j邊界 全初始化為1,因為每乙個單獨的字元都是乙個子串 include include include ...