[狀壓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] 最短Hamilton路徑(模板題+狀壓dp)
- HDU 1074 Doing Homework(狀壓DP)
- 簡易狀態壓縮DP
- 狀壓DP基礎入門
- 合理安排(狀壓dp,包括技巧)
- NOI2001 炮兵陣地(狀壓dp)
- E - Remove Pairs(狀壓dp+博弈論)REMAI
- 求區間不同數的個數【樹狀陣列求解】陣列
- HDU 5816 Hearthstone(狀態壓縮DP+概率)
- Luogu P1777 幫助 題解 [ 紫 ] [ 線性 dp ] [ 狀壓 dp ]
- 合法方案數(dp)
- 每個人都能實現“數字人自由”?HPG
- hdu--5418Victor and World+狀態壓縮DP
- 分組(狀壓dp+技巧:快速列舉子集)
- 一類哈密頓路徑/迴路為背景的狀壓dp
- Codeforces 11D A Simple Task 題解 [ 藍 ] [ 狀壓 dp ]
- bzoj4145: [AMPPZ2014]The Prices(狀態壓縮+Dp)
- 百練4124:海賊王之偉大航路(狀壓DP)
- CF79D Password (差分+狀壓 dp+最短路/bfs)
- 動態規劃——用二進位制表示集合的狀態壓縮DP動態規劃
- [求職 go][成都] dp 的個人簡歷求職Go
- 【躍遷】每個人都是自己的天使投資人
- [DP] 數位DP
- 抖音和微博:兩種不同的@人方案
- 《每個人的戰爭》讀書筆記筆記
- 每個人都應該知道的jQuery的提示jQuery
- abc156D 帶朵數限制的不同扎花方案數
- 3個每個人都討厭的Java實踐 - MilošJava
- 不是每個人的一生都會有貴人相助
- 求區間不同數的個數【主席樹求解】
- 百度李士巖:兩年內每個人有望實現“數字人自由”
- 南沙陳老師解題重排列1234使得每個數字都在不同原來位置上
- 每個運維人員應該知道的 10 個 Linux 命令!運維Linux
- 每個人都應該懂點攻防
- ACM-ICPC 2018 南京賽區網路預賽__E AC Challenge【狀態壓縮+DP】ACM
- 每個人對元宇宙的理解都錯了 - ShaanVP元宇宙