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個不同的樂隊。每個團隊至少有乙個偶像。現在要求重新安排佇列,使來自同一樂隊的偶像連續的站在一起。重新安排的辦法是,讓若干偶像出列 剩下的偶像不動 然後讓出列的偶像乙個個歸隊到原來的空位,歸隊的位...