hdu 1074 狀態壓縮

2022-07-11 10:42:16 字數 975 閱讀 3385

我們可以斷定狀態的終止態一定是n個數全部選完的情況,那麼它的前乙個狀態是什麼呢,一定是剔除任一門課程後的n種狀態。

例如dp[全選了]=min那麼接下來的dp狀態依然如此。

好了,接下來,我們該如何去思考了,這個題目共有2^15種可能情況,對此我們通過位運算的方法降低它的維度。

二進位制的每一位代表一門課,它的組合可以完成展示出所有的狀態。

最後我們應該去思考乙個問題,順序的問題,我們知道,第一次取得時候,一定只有乙個課程,如果我們以

1

int bit = 1

<2for(int i = 1;i能否確保某乙個狀態的前乙個都完全包含,你可以自己去檢驗,是完全滿足的.

**:1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int maxn = (1

<<15)+10;7

const

int inf = 0x3f3f3f;8

struct

node9;

14 node nd[20

];15

intdp[maxn],pre[maxn],t[maxn];

16void output(int

x)17

23int

main()

2437

/*for(int i = 1;i<=n;i++)

38*/

41int bit = 1

<42for(int i = 1;i)

4361}62

else

6370}71

}72}73

}74 cout<1]<75 output(bit-1

);76}77

return0;

78 }

hdu1074狀態壓縮

很明顯的狀態壓縮題目。當然了如果他的意識只有是求最小值沒有要求輸出那個輸出的順序,那麼直接用揹包,甚至是貪心都是可以做出來的,但是要求順序這個揹包的話沒有辦法吧資料記錄下來。所以用二進位制壓縮。所謂的二進位制壓縮就是用二進位制來表示事情的完成程度和狀況,比如1,就是0000001表示第乙個作業做了,...

hdu 1074 狀態壓縮dp

題目描述 有 n 門課程的作業,每門都有完成期限d,與完成所需時間c,若超過期限,1天扣1分。問完成這n門作業至少要扣多少分,並輸出扣分最少的做作業順序。思路 dp i 記錄完成狀態為i的情況下的資訊。完成所需時間,上乙個狀態,最小扣分 狀態方程 dp i min dp j cost j,i 從j狀...

HDU 1074 狀態壓縮dp

起初想到貪心沒思路 看了題解 狀態壓縮dp 最多15個狀態 1,1 include stdio.h include stdlib.h include string.h include algorithm include include define n 1 15 5 define inf 1 30 ...