首页 > 代码库 > hdu 1518 Square(深搜+剪枝)
hdu 1518 Square(深搜+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1518
题目大意:根据题目所给的几条边,来判断是否能构成正方形,一个很好的深搜应用,注意剪枝,以防超时!
1 #include <iostream> 2 #include <cstdio> 3 #include<algorithm> 4 #include <cstring> 5 using namespace std; 6 int ap[30],visit[30]; 7 int l,n; 8 int dfs(int len,int gen,int iqq) 9 {10 if (gen==3)11 return 1;12 for(int i=iqq; i<n; i++)13 {14 //cout<<visit[len]<<endl;15 if (!visit[i])16 {17 visit[i]=1;18 if (len+ap[i]==l)19 {20 //cout<<len<<endl;21 if(dfs(0,gen+1,0))22 return 1;23 }24 else if (len+ap[i]<l)25 {26 //cout<<len<<endl;27 if(dfs(len+ap[i],gen,i)) return 1;28 }29 visit[i]=0;30 }31 }32 return 0;33 }34 int main ()35 {36 int t,sum;37 while (cin>>t)38 {39 while (t--)40 {41 cin>>n;42 sum=0;43 //Max=0;44 for (int i=0; i<n; i++)45 {46 cin>>ap[i];47 sum+=ap[i];48 }49 memset(visit,0,sizeof(visit));50 sort(ap,ap+n);51 if (sum%4==0&&n>=4&&ap[n-1]<=sum/4)52 {53 54 l=sum/4;55 if (dfs(0,0,0))56 printf ("yes\n");57 else58 printf ("no\n");59 //cout<<n<<endl;60 }61 else printf ("no\n");62 }63 }64 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。