![bzoj3195 [Jxoi2012]奇怪的道路——状压DP bzoj3195 [Jxoi2012]奇怪的道路——状压DP](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
题目: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 ;
}