zoukankan      html  css  js  c++  java
  • [Jxoi2012]奇怪的道路 BZOJ3195 状压DP

    分析:

    k很小,可以状压。

    f[S][i]表示状态S表示在i之前k+1个中点的边数奇偶情况

    之后转移的时候,S的最后一位不能为1

    附上代码:

    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstdlib>
    #include <cstring>
    #include <queue>
    #include <iostream>
    using namespace std;
    #define N 35
    #define mod 1000000007
    #define M 1<<9
    int f[N][N][M][10],num,n,m,k;
    int main()
    {
    	scanf("%d%d%d",&n,&m,&k);
    	f[1][0][0][0]=1;
    	for(int i=1;i<n;i++)
    	{
    		for(int j=0;j<=m;j++)
    		{
    			for(int S=0;S<1<<(k+1);S++)
    			{
    				for(int l=0;l<k;l++)
    				{
    					if(!f[i][j][S][l])continue;
    					f[i][j][S][l+1]=(f[i][j][S][l+1]+f[i][j][S][l])%mod;
    					if(j<m&&i-k+1+l>=1)
    					{
    						(f[i][j+1][S^(1<<k)^(1<<l)][l]+=f[i][j][S][l])%=mod;
    					}
    					if(!(S&1))
    					{
    						(f[i+1][j][S>>1][0]+=f[i][j][S][k])%=mod;
    					}
    				}
    			}
    		}
    	}
    	printf("%d
    ",f[n][m][0][0]);
    	return 0;
    }
    

      

  • 相关阅读:
    1.MySql安装
    struts文件上传、文件下载
    Java内存模型
    虚拟机类加载机制
    JAVA内存管理
    算法
    POI
    SSH项目(1)
    classpath路径和properties
    AngularJS路由实现单页面跳转
  • 原文地址:https://www.cnblogs.com/Winniechen/p/9095501.html
Copyright © 2011-2022 走看看