hdu 1074 DP 二進位制狀態壓縮

2021-06-16 13:11:55 字數 901 閱讀 4263

這裡科目最大數目才15, 只要有全列舉的思想來dp就可以解決了, 有乙個專有名詞叫狀態壓縮dp. 狀態壓縮dp採用二制進的思想,

1, 0分別代表有或否.

如: 3的二進位制為 11, 則代表完成了每一,二個科目的狀態, 101代表完成了第一三兩個科目的狀態.

這樣, 可以從0->(1 << n)來獲取所有狀態, 並進行適當的狀態轉移. 對該題來說 d[s]代表集合s的狀態,  要得到d[s]的狀態, 可以從0 - n 分別檢查是否在s集合內[s & (1 << i) > 0則表示i在集合s上,反之..], 如果i在s集合內, 剛d[s]可從d[s-]來獲得, [s-,可以s - (1<

ac**如下:

#include #include #include #include #include using namespace std;

#define max 1<<16

#define maxscore 0x7fffffff

struct homeworkhw[16];

struct dptdp[1<<16];

int main()

int endstate = 1 << n;

// memset( dp, 0, sizeof( dp ) );

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

if( reduce + dp[past].score < dp[i].score )}}

} stackq;

int i = endstate - 1;

cout << dp[i].score << endl;

while( i )

while( !q.empty() )

} return 0;

}

二進位制狀態壓縮

二進位制狀態壓縮,即將乙個長度為m的bool陣列用乙個m位的二進位制數來表示和儲存 操作運算 取出整數n在二進位制表示下的第k位 n k 1 取出整數n在二進位制表示下的第0 k 1位 後 k 位 n 1 取出整數n在二進位制表示下的第k位取反 n xor 1 取出整數n在二進位制表示下的第k位賦值...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

Sleep Buddies (二進位制狀態壓縮)

演算法 狀態壓縮,把每乙個集合都壓縮成乙個數字。使用方法 把每個狀態都進行1 ac code 1 include 2 using namespace std 3 typedef long long ll 4 const int maxn 1e5 10 5 define rep i,first,las...