學習筆記 狀壓dp

2022-04-29 23:39:09 字數 1030 閱讀 8824

\(f[i][j]\) 表示匹配到字串的第 \(i\) 位狀態為 \(j\) 的方案數

那麼方程就很明顯了,每次列舉第 \(i\) 位的字母 \(alpha\) 然後 \(o(n)\) 判斷就好了

時間複雜度 \(o(26tlen2^nn)\)

\(code\ below:\)

#include #define ll long long

using namespace std;

const int p=1e6+3;

int n,k,len,h[20],lg[1<<15],f[51][1<<15];

char s[16][51];

inline int read()

while(isdigit(ch))

return (f==1)?x:-x;

}int main()

}ans=0;

for(int i=0;i狀壓 \(dp\) 好題!

首先 \(a\ or\ b - a\ and\ b = a\ xor\ b\)

\(f[i][j][k]\) 表示到第 \(i\) 個人狀態為 \(j\) 最後乙個打飯的編號為 \(i+k\) 的方案數

那麼就可以轉移了

if(j&1) chkmin(f[i+1][j>>1][k+7],f[i][j][k+8]);

else

while(isdigit(ch))

return (f==1)?x:-x;

}inline void chkmin(int &a,int b)

if((x[f]<=x[k])==(x[k]<=x[j])&&(y[f]<=y[k])==(y[k]<=y[j])&&(y[f]-y[k])*(x[f]-x[j])==(y[f]-y[j])*(x[f]-x[k])) return 1;

return 0;

}void add(res &x,const res &y)

}printf("%d\n",ans);

return 0;

}

狀壓dp學習

p2704 炮兵陣地 1038 裁玻璃 狀壓dp是一種非常暴力的做法,列舉所有可能的狀態,找到要求的最佳狀態,與一般dp不同,前一項與後一項有一些複雜的狀態關係。dp的引數 物品個數 行數等 當前狀態 上乙個狀態 將abc的有無表示成乙個8個狀態,列舉所有組,列舉上乙個狀態,得到當前狀態的最優解 i...

狀壓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表示本行...