題目描述:
給你兩列點,共2n個
對於1~n著n個數,每個數給定乙個對應的數xi,表示左邊的點i與右邊的點xi相連,求問這些連線中,最大的不交叉的連線數量
可以觀察樣例
我們可以發現,滿足不交叉這一條件的必要條件是對於i所以,我們就可以發現,這是一道最長上公升子串行的問題
因為資料範圍是n<40000,所以要用nlogn的二分搜尋lis
可解附上**:
1 #include2 #include3 #include4 #include5view codeusing
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 }
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 ...