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

2021-09-27 13:47:07 字數 750 閱讀 8745

題目

其實看這道題實際上就是列舉m個樂隊的排列,然後對應的站在該樂隊多佔的位置,卻不是該樂隊的人需要出隊。然後最後一定可站成同一團隊連續的排列。那麼下面的dp方程就很好理解啦。

注意:從狀態s 在s後面放乙個樂隊j 一定需要增加的出隊的人數為 樂隊j所佔的容量num[j]處不是樂隊j的人的個數。

//dp[d]=dp[s]+cnt[j]-(s[r][j]-s[l][j]); r=len+cnt[j],l=len;

//dp[s]:狀態為s(已經排列好了的樂隊可以用狀態s表示)

//cnt[j]:第j個樂隊的人數

//num[i][j]:剛開始時(即輸入) 前i個人是第j個樂隊的人數

#include

using

namespace std;

const

int n=

1e5+

5,m=

21,inf=

0x3f3f3f3f

;int cnt[n]

,num[n]

[m],dp[

1<

;int

main()

}printf

("%d\n"

,dp[t-1]);}

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

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

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

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

P3694 邦邦的大合唱站隊

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