[狀壓dp]leeccode1434:每個人戴不同帽子的方案數(hard)
題目:
題解:
- 思路:狀壓dp
- 解法:由於本人剛學習壓狀dp,且在《演算法競賽進階指南》上學習了位運算相關的知識,做了兩個狀壓dp的題,思路是學題解的,這裡貼一下,記錄下吧。
程式碼如下:
class Solution {
public:
//思路:狀壓dp
int numberWays(vector<vector<int>>& hats) {
int maxHatId=0,n=hats.size(),mod=1000000007;
// 尋找最大序號帽子的id,便於返回dp[maxHatId][2^n-1]作答
for(int i=0;i<n;++i){
for(int h:hats[i]){
maxHatId=max(maxHatId,h);
}
}
// 對於每一頂帽子 h,hatToPerson[h] 中儲存了喜歡這頂帽子的所有人,方便進行動態規劃
vector<vector<int>> hatToPerson(maxHatId+1);
for(int i=0;i<n;++i){
for(int h:hats[i]){
hatToPerson[h].push_back(i);
}
}
// dp[i][state]表示我們處理了前i頂帽子,並且已經被分配帽子的人狀態為state的方案數
vector<vector<int>> dp(maxHatId+1,vector<int>(1<<n));
// 邊界條件,0個帽子分配給0個人,這也是一種方案數
dp[0][0]=1;
for(int i=1;i<=maxHatId;++i){
for(int state=0;state<(1<<n);++state){
// 如果第i頂帽子沒有分配給任何人,那麼前i-1頂帽子對應的分配狀態就是state,而dii頂帽子對人的狀態不會發生任何改變
dp[i][state]=dp[i-1][state];
for(int j:hatToPerson[i]){
// 第i頂帽子戴在第j個人的頭上,因此加上前i−1頂帽子對應的分配狀態中,第j個人沒有被分配帽子,而其它人的分配狀態不變。
if(state&(1<<j)){
dp[i][state]+=dp[i-1][state^(1<<j)];
dp[i][state]%=mod;
}
}
}
}
//maxHatId頂帽子分配給n個人的方案數
return dp[maxHatId][(1<<n)-1];
}
};
相關文章
- 狀壓 dp
- 狀壓DP
- 狀壓DP基礎入門
- 合理安排(狀壓dp,包括技巧)
- E - Remove Pairs(狀壓dp+博弈論)REMAI
- Codeforces 895C Square Subsets:狀壓dp【組合數結論】
- 合法方案數(dp)
- Uva-1633 Dyslexic Gollum(狀壓DP)Go
- HDU 5067 Harry And Dig Machine(狀壓dp)Mac
- 演算法學習之路|狀態壓縮dp演算法
- bzoj 3812: 主旋律 [容斥原理 狀壓DP]
- Codeforces Round #321 (Div. 2) D 狀壓dp
- ZOJ 3802 Easy 2048 Again(狀壓dp)AI
- Lightoj 1021 Painful Bases (狀壓dp 有趣)AI
- 分組(狀壓dp+技巧:快速列舉子集)
- Luogu P1777 幫助 題解 [ 紫 ] [ 線性 dp ] [ 狀壓 dp ]
- URAL 1152 False Mirrors(簡單的狀態壓縮dp)False
- 一類哈密頓路徑/迴路為背景的狀壓dp
- NOIP2005過河[DP 狀態壓縮]
- POJ 3254 Corn Fields:網格密鋪類 狀壓dp
- Codeforces 11D A Simple Task 題解 [ 藍 ] [ 狀壓 dp ]
- POJ 2411 Mondriaan's Dream:網格密鋪類 狀壓dp
- Codeforces 327E Axis Walking (狀壓dp lowbit優化)優化
- CF79D Password (差分+狀壓 dp+最短路/bfs)
- 求助:安裝紅帽子重引導後出現GRUB Hard Disk Error(轉)Error
- 每個人都能實現“數字人自由”?HPG
- 動態規劃——用二進位制表示集合的狀態壓縮DP動態規劃
- 求區間不同數的個數【樹狀陣列求解】陣列
- HDU 5135 Little Zu Chongzhi's Triangles(狀壓dp或者貪心)
- HDU 1992Tiling a Grid With Dominoes(狀壓dp)
- UVA 11825 dp、狀態壓縮、二進位制法表示集合
- [DP] 數位DP
- [求職 go][成都] dp 的個人簡歷求職Go
- hdu3001 狀態壓縮dp+三進位制
- 《每個人的戰爭》讀書筆記筆記
- abc156D 帶朵數限制的不同扎花方案數
- Codeforces 453B Little Pony and Harmony Chest:狀壓dp【記錄轉移路徑】
- 數位 dp