hihocoder 1044 狀態壓縮 一

2022-04-28 21:30:22 字數 2794 閱讀 9605

描述

小hi和小ho本著禮讓他們的心情——當然還因為本來他們買的就是站票,老老實實的呆在兩節車廂的結合處。他們本以為就能夠這樣安穩抵達目的地,但 事與願違,他們這節車廂的乘務員是乙個強迫症,每隔一小會總是要清掃一次衛生,而時值深夜,大家都早已入睡,這種行為總是會驚醒一些人。而一旦相鄰的一些 乘客被驚醒了大多數的話,就會同乘務員吵起來,弄得大家都睡不好。

將這一切看在眼裡的小hi與小ho決定利用他們的演算法知識,來幫助這個有著強迫症的乘務員——在不與乘客吵起來的前提下盡可能多的清掃垃圾。

小hi和小ho所處的車廂可以被抽象成連成一列的n個位置,按順序分別編號為1..n,每個位置上都有且僅有一名乘客在休息。同時每個位置上都有一 些垃圾需要被清理,其中第i個位置的垃圾數量為wi。乘務員可以選擇其中一些位置進行清理,但是值得注意的是,一旦有編號連續的m個位置中有超過q個的位 置都在這一次清理中被選中的話(即這m個位置上的乘客有至少q+1個被驚醒了),就會發生令人不愉快的口角。而小hi和小ho的任務是,計算選擇哪些位置 進行清理,在不發生口角的情況下,清掃盡可能多的垃圾。

提示一:無論是什麼動態規劃,都需要乙個狀態轉移方程!

提示二:好像什麼不對勁?狀態壓縮**去了?

輸入每個測試點(輸入檔案)有且僅有一組測試資料。

每組測試資料的第一行為三個正整數n、m和q,意義如前文所述。

每組測試資料的第二行為n個整數,分別為w1到wn,代表每乙個位置上的垃圾數目。

對於100%的資料,滿足n<=1000, 2<=m<=10,1<=q<=m, wi<=100

輸出對於每組測試資料,輸出乙個整數ans,表示在不發生口角的情況下,乘務員最多可以清掃的垃圾數目。

樣例輸入

5 2 1

36 9 80 69 85

樣例輸出

201

狀壓dp學習中,發現不好懂。找了篇結題報告,把其中dp陣列的計算輸出了。

5 2 1

36 9 80 69 85

如果dp[0][0] != -1

計算dp[1][0]  dp[1][1]

如果dp[0][1] != -1

計算dp[1][2]  dp[1][3]

如果dp[0][2] != -1

計算dp[1][0]  dp[1][1]

如果dp[0][3] != -1

計算dp[1][2]  dp[1][3]

如果dp[1][0] != -1

計算dp[2][0]  dp[2][1]

如果dp[1][1] != -1

計算dp[2][2]  dp[2][3]

如果dp[1][2] != -1

計算dp[2][0]  dp[2][1]

如果dp[2][0] != -1

計算dp[3][0]  dp[3][1]

如果dp[2][1] != -1

計算dp[3][2]  dp[3][3]

如果dp[2][2] != -1

計算dp[3][0]  dp[3][1]

如果dp[3][0] != -1

計算dp[4][0]  dp[4][1]

如果dp[3][1] != -1

計算dp[4][2]  dp[4][3]

如果dp[3][2] != -1

計算dp[4][0]  dp[4][1]

如果dp[4][0] != -1

計算dp[5][0]  dp[5][1]

如果dp[4][1] != -1

計算dp[5][2]  dp[5][3]

如果dp[4][2] != -1

計算dp[5][0]  dp[5][1]

dp陣列:

0  0  0  0

0  36  0  -1

0  9  36  -1

36  116  9  -1

36  105  116  -1

116  201  105  -1

最後結果=201

#include #include #include using namespace std;

const int max_n = 1001;

const int max_m = 10;//最多連續10個位置

int n, m, q;//不能超過q

int w[max_n];//儲存每個位置的垃圾

int dp[max_n][1<0)

ok[i]=(cnt<=q);}/*

這段預處理的作用:0到(2^m-1)的所有數可以轉換成二進位制

轉換成的二進位制表示中1的個數時候大於q,如果大於q,則說明

當前的這種狀態是不可取的,可以忽略

*/}void solve()

//讀入資料 每個位置的垃圾

solve();

}return 0;

}

hdu1044 bfs dfs bfs 狀態壓縮

1.狀態壓縮記錄狀態,用十位的二進位制數表示每個寶石選還是不選,共有2 10 1024個狀態,開個陣列vis maxn maxn 1024 判斷在每一點是否達到該狀態,bfs搜尋最短路徑,w h 1024個狀態都要搜到,複雜度較高 include include include using name...

hiho 1044 狀態壓縮 一

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述小hi和小ho在兌換到了喜歡的獎品之後,便繼續起了他們的美國之行,思來想去,他們決定乘坐火車前往下一座城市 那座城市即將舉行美食節!但是不幸的是,小hi和小ho並沒有能夠買到很好的火車票 他們只能夠乘坐最為破舊的火車進行他...

狀態壓縮 二 Hiho9 Hihocoder

歷經千辛萬苦,小hi和小ho終於到達了舉辦美食節的城市!雖然人山人海,但小hi和小ho仍然抑制不住興奮之情,他們放下行李便投入到了美食節的活動當中。美食節的各個攤位上各自有著非常多的有意思的小遊戲,其中乙個便是這樣子的 小hi和小ho領到了乙個大小為n m的長方形盤子,他們可以用這個盒子來裝一些大小...