您的位置:首页 > 其它

HDU 1518 Square

2016-12-02 11:07 387 查看

Square

给一串数字,判断是否能凑成正方形的四个边。

裸搜题,不过没有一遍AC。。。。

直接上代码吧。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>

using namespace std;

int T,n,sum,len;
int info[25];
bool v[25],flag;

int dfs(int id,int completed,int length){
if(completed==4)return 1;
for(int i=id;i<=n;i++){
if(!v[i]){
if(length-info[i]==0){
v[i]=1;
if(dfs(1,completed+1,len)) return 1;
v[i]=0;
}
else if(length-info[i]>0){
v[i]=1;
if(dfs(i+1,completed,length-info[i])) return 1;
v[i]=0;
}
}
}
return 0;
}

bool cmp(int a,int b){
return a>b;
}

int main(){
cin>>T;
while(T--){
sum = 0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",info + i);
sum+=info[i];
}
sort(info+1,info+1+n,cmp);
if(sum%4||n<4){
puts("no");
continue;
}
len = sum/4;
memset(v,0,sizeof(v));
if(dfs(0,0,len))    puts("yes");
else    puts("no");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: