hiho 1044 狀態壓縮 一

2022-02-19 16:50:54 字數 1667 閱讀 9930

時間限制:10000ms

單點時限:1000ms

記憶體限制:256mb

描述小hi和小ho在兌換到了喜歡的獎品之後,便繼續起了他們的美國之行,思來想去,他們決定乘坐火車前往下一座城市——那座城市即將舉行美食節!

但是不幸的是,小hi和小ho並沒有能夠買到很好的火車票——他們只能夠乘坐最為破舊的火車進行他們的旅程。

不僅如此,因為美食節的吸引,許多人紛紛踏上了和小hi小ho一樣的旅程,於是有相當多的人遭遇到了和小hi小ho一樣的情況——這導致這輛車上的人非常非常的多,以至於都沒有足夠的位置能讓每乙個人都有地方坐下來。

小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
#includeusing

namespace

std;

#define ll __int64

#define esp 1e-10

const

int n=2e3+50,m=1e6+10,mod=1e9+7,inf=1e9+10

;int

a[n];

intdp[n][n];

int check(int

x)

return

sum;

}int

main()

}int ans=0

;

for(i=0;i<(1

<)

ans=max(ans,dp[x][i]);

printf(

"%d\n

",ans);

return0;

}

hihocoder 1044 狀態壓縮 一

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

hdu1044 bfs dfs bfs 狀態壓縮

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

狀態壓縮二 (hiho 1048)

題意 給出乙個n m的矩形格仔,用2 1的塊去填滿塊的方案數。2 n 1000,3 m 5 思路 由於m比較小,可以用位對其進行記錄,矩形內1 1的格仔的狀態有 橫著的開始,橫著的結尾,豎著的開始,豎著的結尾,所以用0,1,2,3 來分別進行表示,這樣用乙個2bit即可。為了加速,先把不可能的一些狀...