題目鏈結
\(m\) 很小,考慮狀壓。狀態 \(s\) 一共有 \(m\) 位,每一位代表當前樂隊是否排好(即樂隊所有成員都站在一起),並假設所有排好的樂隊都站在前面。
\(f[s]\) 表示狀態為 \(s\) 時最少移動的偶像數目。不管所有排好的樂隊順序如何,它們的總數是一定的。列舉 \(s\) 狀態中的每乙個 \(0\),如果將它變成 \(1\) 並接在所有排好的樂隊後,需要付出的代價為:所有不在指定區域內的偶像出列,所有在指定區域內不是當前樂隊的偶像出列,它們進行互換。可以使用字首和維護。
#include #include #include using namespace std;
int n, m, cnt, a, sum[26][101000], f[(1 << 20) + 666];
int main()
memset(f, 0x3f, sizeof(f));
f[0] = 0;
for(int i = 0; i <= (1 << m) - 1; i++)
}printf("%d", f[(1 << m) - 1]);
return 0;
}
P3694 邦邦的大合唱站隊
bang dream 裡的所有偶像樂隊要一起大合唱,不過在排隊上出了一些問題。n個偶像排成一列,他們來自m個不同的樂隊。每個團隊至少有乙個偶像。現在要求重新安排佇列,使來自同一樂隊的偶像連續的站在一起。重新安排的辦法是,讓若干偶像出列 剩下的偶像不動 然後讓出列的偶像乙個個歸隊到原來的空位,歸隊的位...
洛谷P3694 邦邦的大合唱站隊 簽到題
bang dream 裡的所有偶像樂隊要一起大合唱,不過在排隊上出了一些問題。n個偶像排成一列,他們來自m個不同的樂隊。每個團隊至少有乙個偶像。現在要求重新安排佇列,使來自同一樂隊的偶像連續的站在一起。重新安排的辦法是,讓若干偶像出列 剩下的偶像不動 然後讓出列的偶像乙個個歸隊到原來的空位,歸隊的位...
洛谷 P3694 邦邦的大合唱站隊 狀壓DP
首先要注意合唱隊排好隊之後不一定是按 1.2.3.m 的順序的 n 的範圍很大,但 m 的資料比較小,所以我們考慮裝壓dp 我們設 f i 為狀態為 i 的合唱隊已經安排好位置的最小花費 接下來就是狀態轉移方程的問題 for int i 1 i 我們用乙個變數 len 記錄排好隊的總人數,如果當前合...