洛谷 P2383 狗哥玩木棒
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P2383 狗哥玩木棒相关的知识,希望对你有一定的参考价值。
题目背景
狗哥又趁着语文课干些无聊的事了...
题目描述
现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢?
输入输出格式
输入格式:
输入文件中的第一行是一个整数n表示测试的组数,接下来n行表示每组的测试数据。 每行的第一个数为m(4<=m<=20),接下来m个数ai(1<=ai<=1000)表示木棒的长度。
输出格式:
对于每组测试数据,如果可以组成正方形输出“yes”,否则输出“no”。
输入输出样例
输入样例#1:
3 4 1 1 1 1 5 10 20 30 40 50 8 1 7 2 6 4 4 3 5
输出样例#1:
yes no yes
说明
狗哥快抓狂了
dfs
#include <algorithm> #include <cstring> #include <cctype> #include <cstdio> using namespace std; inline void Read(int &x) { register char ch=getchar(); for(x=0;!isdigit(ch);ch=getchar()); for(;isdigit(ch);x=x*10+ch-‘0‘,ch=getchar()); } bool flag,use[21]; int n,m,a[21],sum; void dfs(int now,int num,int z) { if(flag) return; if(num==4&&z==m) {flag=1;return;} for(int i=1;i<=m;++i) { if(!use[i]&&now+a[i]<=sum) { use[i]=1; (now+a[i])%sum==0?dfs((now+a[i])%sum,num+1,z+1):dfs((now+a[i])%sum,num,z+1); use[i]=0; } } } int main() { Read(n); for(;n--;) { sum=0; flag=0; Read(m); for(int i=1;i<=m;++i) Read(a[i]),sum+=a[i]; if(sum%4) {printf("no\n");continue;} sort(a+1,a+1+m); sum/=4; dfs(0,1,1); if(flag) printf("yes\n"); else printf("no\n"); } return 0; }
以上是关于洛谷 P2383 狗哥玩木棒的主要内容,如果未能解决你的问题,请参考以下文章