1756八皇后 二进制优化

#include
using namespace std;
int lim=(1<<8)-1;
int p;
int t=1,r[94];
int dfs(int row,int ld,int rd)
{
	if(row==lim) 
	{  
        t++;
        r[t]=r[t-1];
    }
	else
	{
		int pos=lim & ~(row|ld|rd);
		while(pos)
		{
			p=pos&(-pos);
			pos-=p;
			int q=p,ans=0;
			while(q)
			{
				ans++;
				q=q>>1;
			}
			r[t]=r[t]*10+9-ans;
			dfs(row+p,(ld+p)<<1,(rd+p)>>1);
			r[t]=r[t]/10;
		}
	}
}
int main()
{
	dfs(0,0,0);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int n0;
		cin>>n0;
		cout<

你可能感兴趣的:(noi,oj刷题c++)