淺談狀壓DP
淺談狀壓DP
狀壓DP,是指通過一個01串來記錄轉移的狀態,再通過DP的思想轉移方程。
例:如共有五個節點,當前選擇了第1、2、3號節點,則狀態為
(00111)2 = (7) 10
由於計算機中的儲存都採用二進位制,我們可以通過位運算很方便的進行狀態轉移
注意:狀壓DP一般資料範圍較小,多通過位運算進行轉移,且較為簡單。但一般需要預處理,需要十分細緻,很鍛鍊碼力。
例:JDOJ P1104 最佳挑水
題目傳送門
一道狀壓DP裸題,我的做法是預處理出所有挑水方式的狀態,並將矩陣存為DP陣列的初始值。
#include<cstdio>
#include<cstring>
int n;
int dp[1<<19];
int sta[400],cnt=0;
int min(int x,int y)
{
return x<y?x:y;
}
int main()
{
scanf("%d",&n);
memset(dp,0x3f,sizeof(dp));
for(int i=0;i<n;i++)
{
int l = 1 << i ;
for(int j=0;j<n;j++)
{
int r = 1 << j;
int v;
scanf("%d",&v);
if(j==i) continue;
sta[++cnt] = l + r;
dp[l|r] = v ;
}
}
dp[0] = 0;
for(int i=1;i<=cnt;i++)
{
int s = sta[i];
for(int j=0;j<=(1<<n)-1;j++)
{
if((s&j)==0)
{
dp[s|j] = min(dp[s|j],dp[s]+dp[j]);
}
}
}
printf("%d",dp[(1<<n)-1]);
}
相關推薦
淺談狀壓DP
淺談狀壓DP 狀壓DP,是指通過一個01串來記錄轉移的狀態,再通過DP的思想轉移方程。
[做題筆記] 淺談狀壓dp在圖計數問題上的應用
無向圖計數 題目描述 點此看題 有一個 \\(n\\) 個點 \\(m\\) 條邊的無向圖,對於每個 \\(k\\) 求出有多少種保留邊的方案使得 \\(1\\) 能到 \\(k\\)
AcWing 91 最短Hamilton路徑(狀壓dp)
題目連結 解題思路 ??狀壓dp入門題,也是經典的tsp問題。因為tsp問題是np完全問題,所以我們只能考慮通過大量列舉來做。需要注意的一點是,如果走過了1->2->3這樣一條路徑,要到達第4個點的話,並不一定需要從
狀壓DP之集合選數
題目 [HNOI2012]集合選數 《集合論與圖論》這門課程有一道作業題,要求同學們求出{1, 2, 3, 4, 5}的所有滿足以 下條件的子集:若 x 在該子集中,則 2x 和 3x 不能在該子集中。同學們不喜歡這種具有列舉性 質的題目,
dp-狀壓dp
https://www.bilibili.com/video/BV1Z4411x7Kw?from=search&seid=13855865082722302053 狀壓介紹: 狀態表示:
狀壓DP總結
總結 狀壓DP就是將一個狀態壓縮為一個整數(通常為二進位制數),就可以在更為方便地進行狀態轉移的同時,達到節約空間的目的。
狀壓DP之Mixed Up Cows G
題目 傳送們 大意 約翰家有N頭奶牛,第i頭奶牛的編號是Si,每頭奶牛的編號都是唯一的。這些奶牛最近 在鬧脾氣,為表達不滿的情緒,她們在擠奶的時候一定要排成混亂的隊伍。在一隻混亂的隊 伍中,相鄰奶牛的編號之差均
【SCOI2008】獎勵關 題解(狀壓DP+期望)
題目連結 題目大意:給定$n$個寶物,每次隨機丟擲一個寶物,獎勵分數為$p_i$。但如果選這個寶物必須選過它的前置寶物集合。共進行$K$輪問最優策略下的期望。
LOJ#2540. 「PKUWC2018」隨機演算法 狀壓DP+組合
令 $f[S]$ 表示所選的排列可以生成出 $S$ 的最大獨立集且點集 $S$ 全部在序列中的方案數.
「演算法筆記」狀壓DP
一、關於狀壓 dp 為了規避不確定性,我們將需要列舉的東西放入狀態。當不確定性太多的時候,我們就需要將它們壓進較少的維數內。
HDU 6778 Car (狀壓DP)
Car Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 272Accepted Submission(s): 113
牧場的安排(狀壓DP入門)
:將每行輸入的數字轉換為十進位制,然後預處理出所有滿足題意的狀態並存儲於 sta ,再處理出單獨一行時候的方案數並存儲於 dp1,sta列舉第 i 行的狀態,判斷第 j = i-1行的狀態,並更新dpi , j,最後累和即可
2019CSUST個人選拔-我愛吃燒烤(狀壓DP)
題目連結:http://acm.csust.edu.cn/problem/2007 CSDN食用連結:https://blog.csdn.net/qq_43906000/article/details/107654460
狀壓dp 圖論 難題 E. String Transformation 2
狀壓dp 圖論 難題 E. String Transformation 2 題目大意: 你有兩個串, \\(A\\) 和 \\(B\\) ,你可以對A進行操作使得 \\(A=B\\)
狀態壓縮動態規劃(狀壓DP)詳解
0 引子 不要999,也不要888,只要288,只要288,狀壓DP帶回家。你買不了上當,買不了欺騙。它可以當搜尋,也可以卡常數,還可以裝B,方式多樣,隨心搭配,自由多變,一定符合你的口味!
[狀壓DP]P1441 砝碼稱重
前置知識:狀壓DP 洛谷傳送門 emm....看到題目,我第一個想到的就是列舉。暴力大法好!
P1433 吃乳酪(狀壓dp)
狀壓dp 狀壓\\(dp\\)可以解決\\(n<=21\\)的情況。 在狀壓時\\(dp[i][j]\\),代表在第\\(i\\)個位置時且走過二進位制狀態\\(j\\)的最佳答案。
習題:Xenia and Dominoes(狀壓DP&容斥)
題目 傳送門 思路 首先我們考慮如果只有\\(x\\)和\\(.\\)該如何去做 設\\(dp[i][j]\\)表示前i列,第i列的狀態為j,前i-1列均被填滿的方案總數
習題:Felicity's Big Secret Revealed(狀壓DP)
題目 傳送門 思路 經過打表可以發現,出現的最大值最大隻能為20, 我們設\\(dp[i][j]\\)表示最後一刀切在i和i+1之間,已經有的狀態為j
習題: Vladik and cards(狀壓DP)
題目 傳送門 思路 比較顯然的一點,這道題對於一個方案,所有出現的數字的最小出現次數是有單調性的