週末訓練 大理石

2021-09-29 06:29:12 字數 2273 閱讀 2751

【記憶體限制:$256 mib$】【時間限制:$4000 ms$】

【標準輸入輸出】

【題目型別:傳統】【評測方式:文字比較】

林老師是一位大理石收藏家,他在家裡收藏了$n$塊各種顏色的大理石,第$i$塊大理石的顏色為$a_i$。

但是林老師覺得這些石頭在家裡隨意擺放太過凌亂,他希望把所有顏色相同的石頭放在一起。

換句話說,林老師需要對現有的大理石重新進行排列,在重新排列之後,對於每乙個顏色$j$,如果最左邊的顏色為$j$的大理石是第$l$塊大理石,最右邊的顏色為$j$的大理石是第$r$塊大理石,那麼從第$l$塊大理石到第$r$塊大理石,這些石頭的顏色都為$j$。

由於這些大理石都比較重,林老師無法承受這些大理石的重量太久,所以他每次搬運只能交換相鄰的兩塊大理石。

請問,林老師最少需要進行多少次搬運?

第一行輸入乙個數字$n(2≤n≤4*10^5)$,表示大理石的總數。

第二行輸入$n$個數字$a_1,a_2…,an(1≤a_i≤20)$表示第$i$塊大理石的顏色為$a_i$。

輸出林老師最少需要搬運的次數。

樣例輸入 173

4234

22樣例輸入 25

2011410

2樣例輸入 313

5544

3576

5446

樣例輸出 1

3樣例輸出 20

樣例輸出

321

剛拿到這道題,我就被它的時間限制深深地吸引:$4000ms$?

那麼長的時間限制肯定是暴搜窮竭搜尋演算法啊

於是推出了樣例之後就開始碼搜尋...

打到後面發現自己連搜尋都打不出來,於是這麼乙個偉大的演算法就半路夭折了...

一道幾乎可以說是模板的狀壓dp題

觀察所有的資料範圍,發現$1≤a_i≤20$,而幾乎是極端的對立,$2≤n≤4*10^5$,可以說對於$a_i$來說$n$是十分大了。

而時間限制又十分巨大:$4000ms$。

那麼這又說明什麼了嗎?

在輸入的資料中,若其中一兩個的範圍十分小,而其他資料又大得不正常

並且時間限制又異常寬鬆

對於時間來說,這道題的常數非常大(或者是某些模擬題)

對於空間來說,若用其他的空間來開陣列是無法承受的

則說明這道題是狀壓dp,而且壓縮的物件就是針對這些比較小的數的

那麼,這道題的狀態?

定義$dp$一維陣列,其中對於$dp_i$,將$i$轉換成二進位制之後,對於其某一位,若這一位為一,說明這個狀態中,第$i$種顏色已經全部被放在一起了

再定義$c$二維陣列,其中$c_$表示在初始狀態中,所有第$j$種顏色的石頭前的第$i$種顏色的石頭的個數

那麼就有狀轉方程$$dp_i=dp_

11#undef cg

12 templateinline t max(const t x,const t y)

13 templateinline t min(const t x,const t y)

14 templateinline t fab(const t x)

15const

int maxn=4e5;

16const

int inf=1ll<<60;17

const

int maxa=25;18

int a[maxn+5

],n,maxx;

19int cnt[maxa+5],c[maxa+5][maxa+5

];20

int dp[(1

<<20)+5

];21

signed main()

28for(int i=0;i<=(1

<1;++i)dp[i]=inf;

29 dp[0]=0;30

for(int i=1;i<=(1

<1;++i)for(int j=0;jif(i&(1

<35 printf("

%lld\n

",dp[(1

<1

]);36

return0;

37 }

週末訓練 大理石

記憶體限制 256 mib 時間限制 4000 ms 標準輸入輸出 題目型別 傳統 評測方式 文字比較 林老師是一位大理石收藏家,他在家裡收藏了 n 塊各種顏色的大理石,第 i 塊大理石的顏色為 a i 但是林老師覺得這些石頭在家裡隨意擺放太過凌亂,他希望把所有顏色相同的石頭放在一起。換句話說,林老...

大理石在哪兒

現有n各大理石,每個大理石上寫著乙個非負整數。首先把各數從小到大排序,然後回答q各問題。每個問題問是否有乙個大理石寫著某個整數x,如果是,還要回答哪個大理石上寫著x。排序後的大理石從左到右編號為1 n。樣例輸入 4 11 3 5 1 55 2 1 3 3 3 1 2 3樣例輸出 case 1 5 f...

大理石在哪兒

問題 現有n個大理石,每個大理石上寫了乙個非負整數 首先把各數從小到大排序 然後回答q個問題。每個問題問是否有乙個大理石寫著某個整數x,如果是,還要回答哪個大理石上寫著x。排序後的大理石從左到右編號為1 n。在樣例中,為了節約篇幅,所有大理石的數合併到一行,所有問題也合併到一行。樣例輸入 412 3...