zoukankan      html  css  js  c++  java
  • bzoj1087:[SCOI2005]互不侵犯King

    传送门

    设状态(f[i][j][k])为枚举到第(i)行,放国王的状态为(j),目前一共放了(k)个国王
    算出来复杂度挺高的,但是剪枝比较niubi,然后就没了
    代码:

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    void read(int &x) {
    	char ch; bool ok;
    	for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
    	for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
    }
    #define rg register
    const int maxn=2e5+10;
    int n,m;long long ans,f[10][1<<9][100];
    int main()
    {
    	read(n),read(m);
    	int tot=1<<n;f[0][0][0]=1;
    	for(rg int i=1;i<=n;i++)
    		for(rg int j=0;j<tot;j++)
    			for(rg int t=0;t<=m;t++)
    				if(f[i-1][j][t])
    					for(rg int k=0;k<tot;k++)
    						if(!(k&(k<<1))&&!(k&j)&&!((k<<1)&j)&&!(k&(j<<1)))
    						{
    							int h=0;
    							for(rg int g=1;g<=n;g++)h+=((k>>(g-1))&1);
    							if(h+t>m)continue;
    							f[i][k][t+h]+=f[i-1][j][t];
    						}
    	for(rg int i=0;i<tot;i++)ans+=f[n][i][m];
    	printf("%lld
    ",ans);
    }
    
  • 相关阅读:
    数据结构——第二章 线性结构
    数据结构——第一章 绪论
    2018年
    Node笔记(2)
    Node笔记(1)
    公务员考试
    cf-789A (思维)
    cf188C(最大子段和&&思维)
    zzuli1731 矩阵(容斥)
    九余数定理(同余定理)
  • 原文地址:https://www.cnblogs.com/lcxer/p/10502394.html
Copyright © 2011-2022 走看看