【BZOJ4057】【Cerc2012】Kingdoms 状压DP

关注到N<=20,我们开一个bool数组记录每一种状态是否能够达到,最后再检查一遍只剩一个国家的每种状态是否能够达到即可。

注意到一次只能破产一个国家,不能同时破多个。

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int N,T,A[35][35];
bool ok[(1<<21)+100];
void Init()
{
	scanf("%d",&N);
	for(int i=0;i<(1<=0;i--)if(ok[i]==true)
	{
		cnt=0; bancnt=0;
		for(int j=0;j0)
			{
				ban[bancnt]=tmp[u]; bancnt++; 
			}
		}
	/*	for(int j=1;j<(1<=0)ok[w]=true;
		}*/
		for(int j=0;j0)
	{
		for(int i=1;i<=cnt;i++)//printf("%d ",tmp[i]);
		{
			printf("%d ",tmp[i]);
		}
	}
	else
	{
		printf("0");
	}
	return ;
}
int main()
{
//	freopen("in.txt","r",stdin);
	scanf("%d",&T);
	while(T--)
	{
		Init();
		work();
		putchar('\n');
	}
	return 0;
}

你可能感兴趣的:(状压DP)