牛客多校第5場D Drop Voicing

2021-10-08 12:39:23 字數 1076 閱讀 4093

有乙個1~n的排列,有以下兩種操作:

drop-2:將倒數第二個數放到開頭,前面的數向後平移

invert:將倒數第二個數放到開頭,前面的數向後平移

若干連續的drop-2稱為multi-drop。

計算要使該排列排成1~n所需的最少的multi-drop的數量。

首先invert可以無條件使用,那麼就可以想到使用multi-drop相當於將乙個數字移動到想移到的地方,如下演示:

4 1 2 3 5 6

invert

\rightarrow

⇒ 1 2 3 5 6 4

drop-2

*∗ 4 ⇒

\rightarrow

⇒ 5 6 1 2 3 4

invert

\rightarrow

⇒ 1 2 3 4 5 6

以此類推。

所以所求即為需要移動的最少的數字,也就是n-最長不下降子串行長度。

由於invert操作,需要求n種排列中最大的最長不下降子串行長度。

時間複雜度o(n

3)

o(n^3)

o(n3)或o(n

2log

n)

o(n^2logn)

o(n2lo

gn)

#include

using

namespace std;

int n;

int a[

600]

;int dp[

600]

;int

main()

dp[i]++;

}int maxx=0;

for(

int i=

1;i<=n;i++

) maxx=

max(maxx,dp[i]);

ans=

max(ans,maxx);}

printf

("%d"

,n-ans)

;return0;

}

牛客多校第5場 G題 subsequence1

題意 乙個s的串中有多少個比t大的子串行 不連續的 要取模。題解 純dp的題目。建立乙個三維dp i j 3 i,j代表了s的前i項有多少種子序列能匹配t的前j個數字。最後乙個維度3,代表有三個矩陣,乙個是s的前i項有多少種子序列能大於t的前j個數字 2 乙個是s的前i項有多少種子序列能等於t的前j...

牛客多校第3場 C Shuffle Cards

之所以補這題,是因為第一次使用rope,這是乙個可持久化平衡樹。不過本題沒有用到可持久化就是了,平衡樹的split和merge。include using namespace gnu cxx 下標從0開始,不可以cin,可以cout 由於rope的底層實現,insert,erase,get都是log...

牛客多校(第五場)E room

將乙個房間當做乙個點,後來的房間與之前的房間中不用搬的人作為權值,建圖,跑最大權匹配,就是不用搬的人數,在減一下即可,km演算法,o n 3 include include include includeusing namespace std define n 200 define inf 0x3f...