50分求助
查看原帖
50分求助
602519
Iverson_楼主2022/9/7 22:50
#include<iostream>
#include<algorithm>
using namespace std;
const int N=2e5+10;
int n,m,cnt,t;
int a[N],dist[N];
bool vis=false;
void dfs(int u,int cnt)
{
	if(u==4)
	{
		vis=true;
		return;
	}
	for(int i=1;i<=m;i++)
	{
	    if(dist[i]==0)
	    {
	    	t+=a[i];
//	    	cout<<t<<" ";
	    	dist[i]=1;
	    	if(t==cnt)
	    	{
	    		t=0;
	    		dfs(u+1,cnt); 
			}
			else if(t>cnt)
			{
				t-=a[i];
				dist[i]=0;
			}
		}
	}
}
int main()
{
	cin>>n;
	for(int k=1;k<=n;k++) 
	{
		int sum=0;
		cin>>m;
		for(int i=1;i<=m;i++)
		{
			cin>>a[i];
			sum+=a[i];
//			cout<<sum<<" ";
		}
//		cout<<endl;
		if(sum%4!=0)
	    {
		  cout<<"no"<<endl;
	    }
	    else 
	    {
		  cnt=sum/4;
//		  cout<<cnt<<endl;
		  dfs(0,cnt);
		  if(vis) cout<<"yes"<<endl;
		  else cout<<"no"<<endl;
	    }
	 } 
	 return 0;
}
2022/9/7 22:50
加载中...