📄 square(dfs).cpp
字号:
#include <cstdio>
#include <string>
#include <queue>
#include <algorithm>
using namespace std;
int t,n,sum,edge_len;
int len[30];
bool flag;
void dfs(int now, int edge,int pos)
{
int i,j,t;
if (edge == 3) {
flag = true;
return ;
}
for (i=pos;i<n;i++) {
if (len[i] > 0) {
t = len[i];
len[i] = -1;
j = now + t;
if (j == edge_len) {
dfs(0,edge+1,0);
}
else if (j < edge_len) {//注意下次起始i+1,前面i+1无法构造出解
dfs(j, edge, i+1);
}
len[i] = t;
if (flag || edge_len < j) {
return ;
}
}
}
}
int main()
{
int i,j;
scanf("%d",&t);
while (t --) {
scanf("%d",&n);
sum = 0;
for (i=0;i<n;i++) {
scanf("%d",&len[i]);
sum += len[i];
}
sort(len,len+n);
flag = false;
if (sum % 4 == 0) {
edge_len = sum / 4;
if (edge_len >= len[n-1]) {
dfs(0,0,0);
}
}
printf("%s\n", flag ? "yes" : "no");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -