#include<iostream>
#include<algorithm>
#include<fstream>
#include<ctime>
using namespace std;
//#define DEBUG
static int length;
static int sum;
static int n;
static int len[20], used[20];
int dfs(int start, int current, int total)
{
if (length == total)
return 1;
if (total < length)
return 0;
int i;
for (i = start; i < n; i++)
{
if (0 == used[i] && len[i] <= current)
{
used[i] = 1;
if (len[i] == current)
{
if (dfs(0, length, total - len[i]))
return 1;
}
else
{
if (dfs(i + 1, length - len[i], total - len[i]))
return 1;
}
used[i] = 0;
}
}
return 0;
}
int main()
{
#ifdef DEBUG
fstream cin("G:\\book\\algorithms\\acm\\Debug\\dat.txt");
#endif
int t;
cin >> t;
while (t-- > 0)
{
sum = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> len[i]; sum += len[i];
}
if (sum % 4 != 0 || n < 4 || n > 20)
{
cout << "no" <<"\n" ;
continue;
}
length = sum / 4;
memset(used, 0, sizeof used);
if (dfs(0, length, sum))
cout << "yes" << "\n";
else
cout << "no" << "\n";
}
return 0;
}
POJ 2362 正方形 和木棒类似 但是poj一直都报错 不知道它的测试用例是什么,一直没找到错误。
最新推荐文章于 2022-10-24 08:59:28 发布