思想參考的這位的部落格,寫得很詳細,十分感謝她(他),這也是我的第一道狀態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 來獲取所有狀態,並進行適當的狀態轉...