1.【题目描述】
题目描述:给出一堆长度各异的木棍,这些木棍能否头尾相连形成一个正方形
样例输入:
3
4 1 1 1 1
5 10 20 30 40 50
8 1 7 2 6 4 4 3 5
样例输出:
yes
no
2.【代码】
#include<bits/stdc++.h>
using namespace std;
int a[1000];
int b[1000];
int n,m,k,f=0;
void dfs(int x,int d)
{
if(d==3)
{
f=1;
return;
}
for(int i=0;i<m;i++)
{
if(a[i]+x>k||b[i]==1)
{
continue;
}
b[i]=1;
if(a[i]+x==k)
{
dfs(0,d+1);
}
else
{
dfs(x+a[i],d);
}
b[i]=0;
}
}
int main()
{
cin>>n;
while(n--)
{
int sum=0;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>a[i];
sum=sum+a[i];
}
sort(a,a+m);
memset(b,0,sizeof(b));
f=0;
k=sum/4;
if(sum%4!=0)
{
cout<<"no"<<endl;
continue;
}
else if(a[m-1]>k)
{
cout<<"no"<<endl;
continue;
}
else
{
dfs(0,0);
if(f==1)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
}
return 0;
}
仅供参考!