bzoj 1087(状压dp)

传送门

题解:

先预处理st[i]和num[i]两个数组,表示第i个自身合法的状态是啥以及它有多少个1,定义d[i][j][k]表示前i行,当前行为i状态并且还剩k个国王的方案数,从上往下递推即可。

P.S.希望下次不要再因为什么longlong之类的错失1A的良机qwq。。。

#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int MAXN=12;
int n,m;
int st[100],num[100],tot=0;
ll dp[MAXN][100][100];
inline int f(int x) {
	int ret=0;
	for (;x;x-=x&-x) ++ret;
	return ret;
}
int main() {
	scanf("%d%d",&n,&m);
	for (int i=0;i<(1<


你可能感兴趣的:(dp)