bjfu1042 拼正方形
来源:互联网 发布:java执行shell脚本 编辑:程序博客网 时间:2024/05/02 00:12
拼正方形
时间限制(C/C++):1000MS/3000MS 运行内存限制:65536KByte
总提交:126 测试通过:41
总提交:126 测试通过:41
描述
给你一些木棍,让你用这些木棍在地上摆出一个正方形的轮廓。如果能摆成,输出"yes",否则输出"no"。
输入
第一行有一个正整数t表示数据组数
每组数据占一行,一行中第一个数n(4<=n<=20)表示木棍的根数,接下来的n个数字表示每个木棍的长度。
输出
如果能摆成正方形,输出"yes",否则输出"no"。
样例输入
34 1 1 1 15 10 20 30 40 508 1 7 2 6 4 4 3 5
样例输出
yesnoyes
题目来源
jhf
题目知识点:dfs
AC代码:
#include<iostream> #include<algorithm> using namespace std; const int MAXN=21; int a[MAXN]; bool vis[MAXN]; int N,ave,curlen,sum; bool cmp(const int &a, const int &b){ return a>b; } bool dfs(int step,int num){ if(num>3) return true; if(step>=N) return false; if(!vis[step]&&(a[step]+curlen)<=ave*num){ vis[step]=true; curlen+=a[step]; if(curlen==ave*num){ if(dfs(0,num+1)) return true; } else if(dfs(step+1,num)) return true; vis[step]=false; curlen-=a[step]; } return dfs(step+1,num); } bool judge(){ if(N<4||sum%4!=0) return false; ave=sum/4; for(int i=0;i<N;i++) if(a[i]>ave) return false; sort(a,a+N,cmp); memset(vis,false,sizeof(vis)); curlen=0; return dfs(0,1); } int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&N); sum=0; for(int i=0;i<N;i++){ scanf("%d",&a[i]); sum+=a[i]; } if(judge()) cout<<"yes\n"; else cout<<"no\n"; } system("pause"); return 0; }
0 0
- bjfu1042 拼正方形
- Square= =……拼正方形
- 拼
- 正方形
- 正方形
- 正方形
- 正方形
- 正方形
- 正方形
- 正方形
- 正方形;
- 正方形
- 正方形
- 正方形
- 正方形
- 正方形
- 拼了!
- 拼数
- 字节流之Input
- iOS中为uilable设置点击事件
- C# 操作转字符串为list
- dyld: Symbol not found: ___NSArray0__
- 欧拉函数求和
- bjfu1042 拼正方形
- 二分查找判定元素是否存在
- CodeForces 471C MUH and House of Cards
- 成员运算符(.)与指针运算符(->)的区别
- Java Web学习(38):Listener学习(二)
- HTML基础之标签篇(三)
- iOS面试题 2016
- HTML5基本书写格式:
- 今天在使用spring进行文件下载是,总报错: java.lang.IllegalStateException: getOutputStream() has already been calle