poj2817 狀態dp(二進位制儲存) 記憶化搜尋

2021-05-28 13:31:00 字數 932 閱讀 2417

思想參考的這位的部落格,寫得很詳細,十分感謝她(他),這也是我的第一道狀態dp,**是自己敲的,開始的時候,過不了樣例,發現位運算的條件弄錯了,還有num陣列打表弄錯了,改後就1a了。

上面的部落格寫得很詳細,只稍微補充一下(補充在**的注釋中了),其它就看這個部落格就行了。

/*

乙個單詞有就為1,沒有就為0,於是用乙個二進位制序列儲存哪些單詞有或者沒有,

將這個二進位制序轉化成十進位制數,這樣就用乙個整數儲存狀態了

(此處單說有或者沒有,可能會有點不好理解,下面會繼續提到)

*/#include #include using namespace std;

#define max(a, b) a>b?a:b

const int size = 11;

int num[size][size], dp[1050][size];

char word[size][size];

int len[size], n;

void calnum(int n, int m)

for(max2 = i = 0; i < len[m]; i++)

num[n][m] = num[m][n] = max(max1, max2);

}int dfs(int curr, int last)

return (dp[curr][last] = max);

}int main()

for(i = 0; i < n; i++)//打表num陣列

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

calnum(i, j);

int max = 0, tmp;

for(i = 0; i < n; i++)

printf("%d\n", max);

} 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年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

hdu 1074 DP 二進位制狀態壓縮

這裡科目最大數目才15,只要有全列舉的思想來dp就可以解決了,有乙個專有名詞叫狀態壓縮dp.狀態壓縮dp採用二制進的思想,1,0分別代表有或否.如 3的二進位制為 11,則代表完成了每一,二個科目的狀態,101代表完成了第一三兩個科目的狀態.這樣,可以從0 1 n 來獲取所有狀態,並進行適當的狀態轉...