飛彈攔截
時間複雜度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 表示長度...