bzoj3195 [Jxoi2012]奇怪的道路——状压DP

时间:2023-03-09 18:07:34
bzoj3195 [Jxoi2012]奇怪的道路——状压DP

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3195

看到数据范围就应该想到状压呢...

题解(原来是这样):https://www.cnblogs.com/LadyLex/p/7252789.html

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int n,m,k;
ll f[][][<<][],z[],mod=;
int main()
{
scanf("%d%d%d",&n,&m,&k);
z[]=; for(int i=;i<=k+;i++)z[i]=(z[i-]<<);
f[][][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int s=;s<z[k+];s++)
{
for(int l=;l<k;l++)
{
(f[i][j][s][l+]+=f[i][j][s][l])%=mod;
if(j<m&&i-(k-l)>)
(f[i][j+][s^z[k]^z[l]][l]+=f[i][j][s][l])%=mod;
}
if((s&)==)f[i+][j][s>>][]=f[i][j][s][k];
}
printf("%lld",f[n+][m][][]);
return ;
}