LIS問題的簡短

2021-10-02 20:58:17 字數 1017 閱讀 2665

飛彈攔截

時間複雜度o(nlogn)

求最長上公升子串行時:

dp[p] ,p代表最長不上公升子串行的子串行的編號從1開始增加,根據dw定理,最大的m編號即是最長上公升子串行的長度也是最少分成了m組非上公升子串行。

#include

using

namespace std;

int a[

100010

],dp1[

100010

],dp2[

100010

],n;

intmain()

cout

//最長上公升子串行

for(

int i=

1;i<=n;

++i)

cout

}

這種寫法可以很好解決二維偏序需要記錄分組的情況

e2. string coloring (hard version)

給出一串小寫字母,輸出劃分最少的子串行個數使得每個子串行沒有逆序,並輸出每個字母所屬的子串行編號。

7

abcdedc

311

1112

3

最長非降子串行分組對應求最長下降子串行個數

#include

using

namespace std;

const

int maxn=

2e5+10;

int dp[maxn]

;char s[maxn]

;int ans[maxn]

;int

main()

cout<

for(

int i=

1;i<=n;

++i)

return0;

}

石子合併問題 簡短

time limit 1000 ms memory limit 65536 kib 在乙個圓形操場的四周擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分和最大得分。...

LIS問題分析

題目 原題這個lis問題,可不是longest increasing subsequence,而是largest independent set,含義如下 給定一棵二叉樹,找到滿足如下條件的最大節點集合 集合中的任意兩個節點之間,都沒有邊。如下圖 lis大小為5,為.分析 首先還是遞迴思想,比如對於...

關於加權的LIS問題

蒟蒻zigzag正在準備聯賽.這個算是這幾天做的唯一乙個值得寫一寫的題吧。首先lis的n 2暴力dp應該都會寫,就是f i max 1 那麼加權的就吧後面的1換成數的權值就行了,如果優先長度的話加一些判斷就行了。那麼o nlogn 怎麼寫?lis的nlogn應該都會寫,就是記乙個陣列d i 表示長度...