POJ 2362 square
题意就是问能否构成正方形,本题通过DFS来实现,可看做DFS经典范例
#include<cstdio>
#include<algorithm>
using namespace std;
int len[25], n, m, sum, l;
bool vist[25];
bool cmp(int a, int b)
{
return b < a;
}
bool dfs(int num,int d,int s)
{
if (num == 3)
return true;
for (int i = s;i < m;i++)
{
if (vist[i])
continue;
vist[i] = true;
if (d + len[i] < l)
{
if (dfs(num,d+len[i],i))
return true;
}
else if (d + len[i] == l)
{
if (dfs(num+1,0,0))
return true;
}
vist[i] = false;
}
return false;
}
int main()
{
scanf("%d", &n);
while (n--)
{
sum = 0;
scanf("%d", &m);
for (int i = 0;i < m; i++)
{
scanf("%d", &len[i]);
vist[i] = false;
sum += len[i];
}
if (sum % 4 != 0 || m < 4)
{
printf("no\n");
continue;
}
sort(len, len + m, cmp);
l = sum / 4;
if (len[0] > l)
{
printf("no\n");
continue;
}
if (dfs(0, 0, 0))
printf("yes\n");
else
printf("no\n");
}
return 0;
}