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

2021-10-24 12:48:05 字數 803 閱讀 9581

n

nn個人,有m

mm個隊伍,每個人都屬於乙個隊伍。要求叫出一些人來,然後任意插入出來的空隙中使得同一隊的人在一起。求最少出列人數。

如果知道最終的佇列就可以十分容易的計算答案了。考慮乙個乙個隊伍的放入最終序列中,因為m

mm十分的小,所以我們可以狀壓表示排好了的隊伍集合,然後用乙個字首和統計在乙個區域內每個隊伍的人數即可進行dpdp

dp。時間複雜度o(n

m+2m

m)

o(nm+2^mm)

o(nm+2

mm)

#include

#include

#include

using

namespace std;

int n,m,s[

110000][

20],wz[

1<<20]

,f[1

<<20]

;int

main()

int ms=

1

int i=

0;i)for

(int j=

0;j) wz[i]

+=s[n]

[j]*

((i>>j)&1

);memset

(f,0x3f

,sizeof

(f))

;f[0]=

0;for(

int i=

1;iprintf

("%d"

,f[ms-1]

);}

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

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

P3694 邦邦的大合唱站隊

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

P3694 邦邦的大合唱站隊 狀壓dp好題!!

題目 其實看這道題實際上就是列舉m個樂隊的排列,然後對應的站在該樂隊多佔的位置,卻不是該樂隊的人需要出隊。然後最後一定可站成同一團隊連續的排列。那麼下面的dp方程就很好理解啦。注意 從狀態s 在s後面放乙個樂隊j 一定需要增加的出隊的人數為 樂隊j所佔的容量num j 處不是樂隊j的人的個數。dp ...