P3694 邦邦的大合唱站隊

2022-05-10 03:00:34 字數 990 閱讀 3289

bang dream!裡的所有偶像樂隊要一起大合唱,不過在排隊上出了一些問題。

n個偶像排成一列,他們來自m個不同的樂隊。每個團隊至少有乙個偶像。

現在要求重新安排佇列,使來自同一樂隊的偶像連續的站在一起。重新安排的辦法是,讓若干偶像出列(剩下的偶像不動),然後讓出列的偶像乙個個歸隊到原來的空位,歸隊的位置任意。

請問最少讓多少偶像出列?

輸入格式:

第一行2個整數n,m。

接下來n個行,每行乙個整數\(a_i(1\le a_i \le m)\),表示佇列中第i個偶像的團隊編號。

輸出格式:

乙個整數,表示答案

輸入樣例#1:複製

12 413

2421

2311

34輸出樣例#1:複製

【樣例解釋】

1  3   √

3 3

2 3 √

4 4

2 4 √

1 2 √

2 2

3 2 √

1 1

1 1

3 1 √

4 1 √

【資料規模】

對於全部資料,\(1\le n\le 10^5, m\le 20\)

\(m\le 20\)矚目

容易聯想到狀壓

然後這道題就做完了

#include#includeusing namespace std;

int i,m,n,j,k,a[100001],f[1100001],s[100001][21],e[1100001],d[1100001];

int main()

for(i=1;i<=(1<}

printf("%d",n-f[(1<}

洛谷 P3694 邦邦的大合唱站隊

題目鏈結 m 很小,考慮狀壓。狀態 s 一共有 m 位,每一位代表當前樂隊是否排好 即樂隊所有成員都站在一起 並假設所有排好的樂隊都站在前面。f s 表示狀態為 s 時最少移動的偶像數目。不管所有排好的樂隊順序如何,它們的總數是一定的。列舉 s 狀態中的每乙個 0 如果將它變成 1 並接在所有排好的...

P3694 邦邦的大合唱站隊 狀壓dp

n nn個人,有m mm個隊伍,每個人都屬於乙個隊伍。要求叫出一些人來,然後任意插入出來的空隙中使得同一隊的人在一起。求最少出列人數。如果知道最終的佇列就可以十分容易的計算答案了。考慮乙個乙個隊伍的放入最終序列中,因為m mm十分的小,所以我們可以狀壓表示排好了的隊伍集合,然後用乙個字首和統計在乙個...

P3694 邦邦的大合唱站隊 狀壓DP

bang dream 裡的所有偶像樂隊要一起大合唱,不過在排隊上出了一些問題。n個偶像排成一列,他們來自m個不同的樂隊。每個團隊至少有乙個偶像。現在要求重新安排佇列,使來自同一樂隊的偶像連續的站在一起。重新安排的辦法是,讓若干偶像出列 剩下的偶像不動 然後讓出列的偶像乙個個歸隊到原來的空位,歸隊的位...