\(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表示本行...