⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2362.txt

📁 北大ACM题目例程 详细的解答过程 程序实现 算法分析
💻 TXT
字号:


#define debug 0
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#define NMAX 23
int b[NMAX],v[NMAX],n,sum;
int cmp(const void *a,const void *b)
{
	return (*(int*)b)-(*(int*)a);
}
int flag=1,m[5];
int tr(int k,int last,int s);
int judge(int s)
{
	int i;
	if(s==4)
		return 1;
	for(i=0;i<n;i++)
	{
		if(!v[i])
			break;
	}
	return tr(i,sum/4,s);
}
int tr(int k,int last,int s)
{
	int i;
	for(i=k;i<n;i++)
	{
		if(v[i])
			continue;
		if(last-b[i]>=0)
		{
			v[i]=1;
			if(last-b[i]==0)
			{
				if(judge(s+1))
					return 1;
				
			}
			else
			{
				if(tr(i+1,last-b[i],s))
					return 1;
			}
			v[i]=0;
		}
	}
	return 0;
}

main()
{
#if debug 	
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
#endif
	int t,i;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		sum=0;
		for(i=0;i<n;i++)
		{
			scanf("%d",&b[i]);
			sum+=b[i];
		}
		if(sum%4)
		{
			printf("no\n");
			continue;
		}
		qsort(b,n,sizeof(int),cmp);
		memset(v,0,sizeof(v));
		memset(m,0,sizeof(m));
		m[1]=0;
		if(judge(1))
			printf("yes\n");
		else
			printf("no\n");
	}

#if debug
	fclose(stdin);
	fclose(stdout);
#endif;
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -