看范围,状压没毛病
但是如果随便连的话给开1<<16,乘上n,m就爆了 所以规定转移时只向回连边 于是想状态数组:f[i][j]表示到i这里i前K位的状态为j(表示奇偶) 发现有条数限制,但是n,m,2^K都比较小,加一维, f[i][j][k]表示前i位,用j条路,i前的K位状态为j 转移的话,因为1<=|u - v|<=K, 所以转移时必须要保证转移前一位能连到的最远距离是偶数 然后在本位就向回依次连就好了。#include#define mod 1000000007using namespace std;int n,m,K,bit[12];long long f[35][35][515];int main(){ bit[0]=1; for(int i=1;i<=10;i++)bit[i]=bit[i-1]<<1; scanf("%d%d%d",&n,&m,&K); f[1][0][0]=1; for(int i=2;i<=n;i++){ for(int k=0;k >1]=(f[i][j][k>>1]+f[i-1][j][k])%mod; for(int l=1;l<=K;l++) if(i-l>0) for(int j=0;j