zoukankan      html  css  js  c++  java
  • 【NOI2001】炮兵阵地(状态压缩,动态规划)

    题面

    题面中有图片的存在,所以就贴个地址把

    题解

    简单题,,,,
    原来一直觉得不会做。。。
    现在发现是一道傻逼题
    暴力压两行的状态
    发现就需要滚一维。
    然后暴力检查一下状态的可行性
    DP检查MAX就可以了

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    inline int read()
    {
    	int x=0,t=1;char ch=getchar();
    	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    	if(ch=='-')t=-1,ch=getchar();
    	while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    	return x*t;
    }
    int f[2][1<<10][1<<10];
    int n,m,way[110],ans;
    int main()
    {
    	n=read();m=read();
    	char ch[50];
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%s",ch+1);
    		for(int j=1;j<=m;++j)
    			way[i]|=(ch[j]=='P')<<(j-1);
    	}
    	for(int i=1;i<=n;++i)
    	{
    		memset(f[i&1],0,sizeof(f[i&1]));
    		for(int j=0;j<(1<<m);++j)
    		{
    			if(i==1&&j!=0)break;
    			if(i!=1&&i!=2)if((j&way[i-2])!=j)continue;
    			if(j&(j<<1))continue;
    			if(j&(j<<2))continue;
    			if(j&(j>>1))continue;
    			if(j&(j>>2))continue;
    			for(int k=0;k<(1<<m);++k)
    			{
    				if(k&j)continue;
    				if(i!=1)if((k&way[i-1])!=k)continue;
    				if(k&(k<<1))continue;
    				if(k&(k<<2))continue;
    				if(k&(k>>1))continue;
    				if(k&(k>>2))continue;
    				for(int l=0;l<(1<<m);++l)
    				{
    					if(l&k)continue;
    					if(l&j)continue;
    					if((l&way[i])!=l)continue;
    					if(l&(l<<1))continue;
    					if(l&(l<<2))continue;
    					if(l&(l>>1))continue;
    					if(l&(l>>2))continue;
    					int tot=0,gg=l;
    					while(gg)tot++,gg-=gg&(-gg);
    					ans=max(ans,f[i&1][k][l]=max(f[i&1][k][l],f[(i-1)&1][j][k]+tot));
    				}
    			}
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
    
  • 相关阅读:
    10、函数介绍、函数参数、函数的返回值
    9、bytes类型,文件处理
    8、集合类型、文件处理
    7、列表类型、元组、字典类型
    6、for循环补充、可变类型与不可变类型、基本操作
    5、while循环与for循环
    4、基本运算符、if语法
    3、变量、常量、基本数据类型
    爬虫(一)
    小技能(二)
  • 原文地址:https://www.cnblogs.com/cjyyb/p/7738694.html
Copyright © 2011-2022 走看看