上海交大oj 暢暢的牙籤袋(狀態壓縮dp

2022-08-30 17:03:11 字數 1955 閱讀 1967

暢暢說:「你們都說窩腦子瓦特了,我看你們才是腦子瓦特嘞- -」

為了阻撓我們再次揭露他的無chǐ,暢暢妄圖破壞我們的顯示器,他拿出了自己收集的牙籤包裝袋,其大小是1×2的矩形,他想用密鋪的方式把顯示器全部遮擋住。顯示器大小是w×h的矩形,暢暢把包裝袋背面塗上了膠水,開始一塊一塊粘到顯示器上,要求不能有包裝袋重疊,也不能有顯示器的某一部分沒被遮擋,包裝袋的放置只有兩種情況:橫放和豎放。

暢暢為自己的周密計畫洋洋得意之時,腦子又瓦特了,他想讓你幫他算算針對每台顯示器一共有多少種不同的密鋪方式。

認為顯示器是有方向的,即對稱的密鋪方式要算重複計數,例如 2×2 的顯示器密鋪方案有兩種,一種是2個包裝袋都橫放,另一種是兩個包裝袋都豎放。

不能密鋪的則輸出0。

牙籤包裝袋足夠用。

輸入包括若干行,每行有兩個整數wi和hi,表示這台顯示器大小,輸入資料以wi=hi=0作為結束,每台顯示器大小 1<=hi,wi<=11。

針對每行輸入,每次輸出乙個整數表示對該顯示器密鋪的方案總數。wi=hi=0時不需要輸出。

1 2

1 31 4

2 22 3

2 42 11

4 11

0 0

101

235144

51205

暢暢說如果wi×hi是奇數的話可行的方案數就是0了。

暢暢思來想去,認為以行為單位來一行行填充,同時用狀態壓縮的方式表示每一行的填充狀態,0表示空1表示已填充,如乙個長為3的行有000,001,010,011,100,101,110,111這樣幾種狀態表示。

暢暢覺得動態規劃太難的話,只有暴力搜尋了。

暢暢說30%測試點只有一台顯示器,70%測試點只有不超過十臺顯示器,100%測試點只有不超過121臺顯示器

暢暢說答案很小的,long long就夠了

鋪磚塊問題。每一行為乙個階段,最多有2^11種狀態,那麼列舉這一行的狀態就好了,在這一行的狀態確定的情況下,列舉上一行的狀態,檢查是否相容(若上一行為0,表示沒有鋪,則這一行對應位置必須為1,若上一行為1,這一行可以為0也可以為1,但要注意的是,若為1,說明兩行的這個位置都是平鋪,否則必有其中乙個為零(下一行來鋪),那麼由於是平鋪,下乙個位置的兩行都為1,否則狀態不相容),若相容則加上對應的數目。

複雜度為h*(2^w)*(2^w)。也可以乙個點乙個點動歸,這個還沒實現過,暫時不表。

**:

1 #include 2 #include 3

using

namespace

std;45

intw,h;

6long

long dp[11][1

<<11];7

long

long first_line(intn)8

20}21}

22return1;

23}24bool match(int n,int

l)2538}

39}40else

if (!(t & l)) return0;

41}42return1;

43}44int

main()

55if (h//

減少複雜度

5661 memset(dp,0,sizeof

(dp));

62for (int i = 0;i < 1

<0][i] = first_line(i); //

initialize

63for (int i = 1;i < h;++i)

64for (int j = 0;j < 1

/當前行狀態列舉

65for (int k = 0;k < 1

/前一行狀態列舉

6669 cout<1][(1

<1]<

7172

return0;

73 }

view code

演算法之路之征服上海交大的oj 矩陣翻轉

矩陣翻轉 description 給定乙個正方形的整數矩陣,輸出將該矩陣按某一方向翻轉後的結果。input format 輸入第一行有乙個整數n,表示一共有n組資料 n不會為負數。之後有n組資料,對於每組資料 第一行有兩個整數a和b,分別表示正方形矩陣的邊長,以及翻轉的方向。當b 0時水平翻轉,當b...

演算法之路之征服上海交大的oj 水槍滅火

水槍滅火 description 以此題紀念上海 11 15 高樓火災遇害者 11月15日下午,上海靜安區膠州路728號的一幢28層民宅發生嚴重火災。消防部門接警後立刻出動25個消防中隊 百餘輛消防車投入滅火搶救行動,緊急疏散和救助了附近居民百餘人。火災導致58人遇難。此時大樓的所有樓層已經全部被烈...

演算法之路之征服上海交大的oj 求和遊戲

求和遊戲 description 石柱上有一排石頭鍵盤,每個鍵上有乙個整數。請你在鍵盤上選擇兩個鍵,使這兩個鍵及其之間的鍵上的數字和最大。如果這個最大的和不為正,則輸出 game over input format 第1行 鍵的個數n。第2.n 1行 鍵上的數字整數 ai 100 ai 100 對於...