pku 2362 Square
来源:互联网 发布:皇朝娱乐关注软件 编辑:程序博客网 时间:2024/06/01 08:15
题目连接
http://acm.pku.edu.cn/JudgeOnline/problem?id=2362
#include <iostream>
#include <algorithm>
using namespace std;
int N,M;
int edgeLen,sum;
bool bfind;
int sticks[21],visited[21];
//按递减的顺序排列
int descend(const void * e1,const void *e2){
return (*(int *)e1) - (*(int *)e2) < 0 ? 1 : -1;
}
void dfs(int stick_num,int cur_len,int edge){
//cout<<stick_num<<" "<<cur_len<<" "<<edge<<endl;
visited[stick_num] = true;
if(edge == 4){
bfind = true;
return ;
}
else if(cur_len == edgeLen){
//一条边已经拼好,搜索拼下一条边
edge++;
//!!!!!!!!!!!!!
//edge++这样写就是正确的,要是在dfs调用里写成++edge就错!!!
//!!!!!!!!!!!!!!!
for(int i = 0;i < M;i++)
if(visited[i] == false)
dfs(i,sticks[i],edge);
}
else{
//把当前的边补充完整,按边长递减的顺序dfs
for(int i = stick_num + 1;i < M;i++)
if(visited[i] == false && cur_len + sticks[i] <= edgeLen)
dfs(i,cur_len + sticks[i],edge);
}
//当不能拼成一个正方形时,回溯,退一条边
if(bfind == false)
{
visited[stick_num] = false;
edge--;
}
}
int main(){
cin>>N;
while(N--){
cin>>M;
int max = 0;
sum = 0;
for(int i = 0;i < M;i++){
cin>>sticks[i];
sum += sticks[i];
visited[i] = false;
if(max < sticks[i])
max = sticks[i];
}
edgeLen = sum / 4;
//是4的倍数
if(sum % 4 == 0 && max <= edgeLen){
bfind = false;
qsort(sticks,M,sizeof(int),descend);
dfs(0,sticks[0],1);
if(bfind == false)
cout<<"no"<<endl;
else
cout<<"yes"<<endl;
}
else
cout<<"no"<<endl;
}
return 0;
}
- pku 2362 Square
- pku 2362 Square
- [数学题] pku 3472 Holey Square Tiling
- 【IDA*+位运算】PKU-1084-Square Destroyer
- PKU Online Judge / 练习 1046 Square Number
- PKU Online Judge 1046 Square Number
- PKU 1046-Square Number(数论)
- PKU 2362
- poj 2362 Square
- poj 2362 Square
- poj 2362Square(DFS)
- poj 2362 Square
- POJ 2362 Square dfs
- poj 2362 Square
- POJ-2362-Square
- POJ 2362 Square
- poj 2362 Square
- poj 2362 Square
- 异步串行通讯和同步串行通讯区别
- ubuntu 10.04下的gtk+环境的搭建
- 索引服务器(全文索引)的使用
- 第一册 Lesson 3 Sorry Sir
- VC++之Scroll Bar
- pku 2362 Square
- POJ1251题的代码
- hdu1711 Number Sequence
- pku3487(稳定婚姻问题)
- 对你工作的几条忠告
- windows 下qt 连接mysql
- hdu1251
- mongodb小结(转)
- 获取汉字拼音(繁体转简体)