状压dp,预处理出:
line[i]:第i行状态是否合法
ok[i][j],表示第i行的状态到第j行的状态是否能转移。
situ[i][j],表示i状态转到j状态是否可行。
设f[i][j]表示第i行状态为j时的答案,那么我们枚举一个k,对于所有合法的,能够转移到j的k,加上去。最后答案就是sigma(f[n][i])。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n,m,k;
const int N=1<<12;
const int