zoukankan      html  css  js  c++  java
  • 【HDU1693】Eat the Trees(插头dp)

    【HDU1693】Eat the Trees(插头dp)

    题面

    HDU
    Vjudge
    大概就是网格图上有些点不能走,现在要找到若干条不相交的哈密顿回路使得所有格子都恰好被走过一遍。

    题解

    这题的弱化版本吧。。。
    因为可以任意分配哈密顿回路的数量,因此根本不需要再考虑插头的配对问题了,那么直接分情况转移就好啦。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    using namespace std;
    #define ll long long
    #define MAX 13
    inline int read()
    {
    	int x=0;bool t=false;char ch=getchar();
    	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    	if(ch=='-')t=true,ch=getchar();
    	while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    	return t?-x:x;
    }
    int bin[MAX];
    ll f[MAX][MAX][1<<12];
    int n,m;
    int g[MAX][MAX];
    int main()
    {
    	int T=read();
    	bin[0]=1;for(int i=1;i<13;++i)bin[i]=bin[i-1]<<1;
    	for(int TT=1;TT<=T;++TT)
    	{
    		n=read();m=read();memset(g,0,sizeof(g));memset(f,0,sizeof(f));
    		for(int i=1;i<=n;++i)
    			for(int j=1;j<=m;++j)
    				g[i][j]=read();
    		f[0][m][0]=1;int S=1<<(m+1);
    		for(int i=1;i<=n;++i)
    		{
    			for(int k=0;k<S>>1;++k)f[i][0][k<<1]=f[i-1][m][k];
    			for(int j=1;j<=m;++j)
    				for(int k=0;k<S;++k)
    				{
    					int left=(k>>(j-1))&1,up=(k>>j)&1;
    					if(!g[i][j])
    					{
    						if(!left&&!up)f[i][j][k]+=f[i][j-1][k];
    						continue;
    					}
    					if(!left&&!up)
    						if(g[i+1][j]&&g[i][j+1])f[i][j][k+bin[j-1]+bin[j]]+=f[i][j-1][k];
    					if(!left&&up)
    					{
    						if(g[i+1][j])f[i][j][k+bin[j-1]-bin[j]]+=f[i][j-1][k];
    						if(g[i][j+1])f[i][j][k]+=f[i][j-1][k];
    					}
    					if(left&&!up)
    					{
    						if(g[i+1][j])f[i][j][k]+=f[i][j-1][k];
    						if(g[i][j+1])f[i][j][k-bin[j-1]+bin[j]]+=f[i][j-1][k];
    					}
    					if(left&&up)f[i][j][k-bin[j-1]-bin[j]]+=f[i][j-1][k];
    				}
    		}
    		printf("Case %d: There are %lld ways to eat the trees.
    ",TT,f[n][m][0]);
    	}
    }
    
  • 相关阅读:
    年度开源盛会 ApacheCon 来临,Apache Pulsar 专场大咖齐聚
    开源流数据公司 StreamNative 正式加入 CNCF,积极推动云原生策略发展
    php摇杆Tiger摇奖
    php调试局部错误强制输出 display_errors
    php文件写入PHP_EOL与FILE_APPEND
    window自动任务实现数据库定时备份
    php 跨服务器ftp移动文件
    linux 关于session缓存丢失,自己掉坑里面了
    mysql 定时任务
    mysql 查询去重 distinct
  • 原文地址:https://www.cnblogs.com/cjyyb/p/10092309.html
Copyright © 2011-2022 走看看