狀壓dp專題

2022-10-09 13:39:10 字數 888 閱讀 6082

經典的狀壓dp

先考慮橫著放 如果橫著放的方案確定了 那麼豎著放的也就唯一確定了

所以總方案數=橫著放的方案數

但是可能我們橫著放完了後 留下的空間豎著放怎麼都不能放滿(也就是豎著連續對的0為奇數)不合法

這個我們可以預處理

定義方程:設dp[i,j]表示前i列已經放完橫木塊且第i列的狀態為j的總方案數

例如j=010110 則表示第二,四,五行有木塊捅到後面一列去(也就是橫著放的木塊的頭子在第i列的第2,4,5行)

轉移方程:dp[i,j]+=dp[i-1,k] 其中j和k狀態必須合法

合法條件:1, j&k=0 因為防止木塊重合

2, 第i列合法(第i列的木塊包括第i-1列捅過來的和第i列捅出去的)

初始狀態dp[0,0]=1

終止狀態dp[m,0](第m列不能再往後捅了)

#includeusing namespace std;

#define lowbit(x) x&(-x)

#define ll long long

const int maxn=12;

int n,m;

ll dp[maxn][1<

int pd[1<

int main()else cnt=0;

}else cnt++;

}if(cnt&1)pd[i]=false;

} memset(dp,0,sizeof(dp));

dp[0][0]=1;

for(int i=1;i<=m;i++)

return 0;

}

狀壓dp專題 2017 10 1

t1 hie with the pie 提示出處 t2 doing homework 提示出處 t3 card collector 提示出處 給你幾個點,每個點都有到其他點的價值,請問遍歷所有點的最小價值.最短路 狀壓.include include include using namespace ...

狀壓dp 玉公尺田 狀壓dp

相關 強相關 327.玉公尺田 狀壓dp 小國王 狀壓dp 是井字形,本題是十字形。思路 狀態計算 時間複雜度 n 2 n 2n o n 22n 12 2 24n 2 n 2 n o n2 12 2 n 2n 2 n o n22n 12 224 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...

狀壓dp小記

鋪磚 題意 現有nm的一塊地板,需要用12的磚塊去鋪滿,中間不能留有空隙。問這樣方案有多少種 include using namespace std typedef long long ll const int maxn 1 11 int n,m,state ll dp 15 maxn s1表示本行...