[狀壓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
- Codeforces 895C Square Subsets:狀壓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
- URAL 1152 False Mirrors(簡單的狀態壓縮dp)False
- 一類哈密頓路徑/迴路為背景的狀壓dp
- NOIP2005過河[DP 狀態壓縮]
- POJ 3254 Corn Fields:網格密鋪類 狀壓dp
- POJ 2411 Mondriaan's Dream:網格密鋪類 狀壓dp
- Codeforces 327E Axis Walking (狀壓dp lowbit優化)優化
- 求助:安裝紅帽子重引導後出現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、狀態壓縮、二進位制法表示集合
- 求區間不同數的個數【樹狀陣列求解】陣列
- [求職 go][成都] dp 的個人簡歷求職Go
- hdu3001 狀態壓縮dp+三進位制
- abc156D 帶朵數限制的不同扎花方案數
- Codeforces 453B Little Pony and Harmony Chest:狀壓dp【記錄轉移路徑】
- 每個人都應該知道的jQuery的提示jQuery
- 每個人都應該懂點函數語言程式設計函數程式設計
- 每個人都該懂點的版本管理技能
- Codeforces 461B. Appleman and Tree[樹形DP 方案數]APP
- 不同精度孔的加工方案
- 不同版本下的rman壓縮備份
- 2014上海網路賽1004||hdu5045 contest【狀態壓縮dp】
- 蘋果的帽子戲法蘋果
- 互不侵犯 (狀壓)
- 統計當前系統中不同執行狀態的程式數量
- 雲端計算是如何影響到每個人的生活的?