计蒜客习题:正方形
题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/15c8428a8c0325cfe1b769254c4ed6a9.png)
样例
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ddb15bcfe7ab69e60b2b495de61a15b1.png)
代码
#include<iostream>
#include<algorithm>
using namespace std;
bool v[30];
int n,sum=0,ave,flag=0,l[30];
void dfs(int ave1,int num,int pos)
{
if(flag==1) return;
if(num==3)
{
flag=1;
return;
}
if(ave1==0)
{
num++;
ave1=ave;
pos=0;
}
for(int i=pos;i<n;i++)
{
if(!v[i]&&ave1>=l[i])
{
v[i]=1;
if(ave1-l[i]>=0) dfs(ave1-l[i],num,i);
v[i]=0;
}
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>l[i];
sum+=l[i];
}
ave=sum/4;
sort(l,l+n,greater<int>());
if(l[0]>ave||sum%4) cout<<"No"<<endl;
else
{
dfs(ave,0,0);
if(flag==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}