hdu 1518 拼正方形

本题来自:http://acm.hdu.edu.cn/showproblem.php?pid=1518

题意:输入几个长度,判断能否拼成正方形。

以下部分参考了网友代码,终于ac啦。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 bool vis[21];
 5 int num[21];
 6 int len,m;
 7 int comp ( const void *a, const void *b ){return * ( int * ) a - * ( int * ) b;}
 8 
 9 bool dfs(int start,int s,int cnt)
10 {
11     if(len==s)
12          return cnt==3?true:dfs(0,0,cnt+1);
13     else
14     {
15         for(int i=start;i<m;i++)
16             if(!vis[i]&&s+num[i]<=len)
17             {
18                 vis[i]=true;
19                 if(dfs(i+1,s+num[i],cnt))
20                     return true;
21                 vis[i]=false;
22             }
23     }
24     return false;
25 }
26 
27 int main()
28 {
29     int T;
30     scanf("%d",&T);
31     while(T--)
32     {
33         int sum=0;
34         memset(vis,false,sizeof(vis));
35         scanf("%d",&m);
36         for(int i=0;i<m;i++)
37         {
38             scanf("%d",&num[i]);
39             sum+=num[i];
40         }
41         qsort(num,m,sizeof(int),comp);
42         if(sum%4||num[m-1]>sum/4||m<4)printf("no\n");
43         else
44         {
45             len = sum/4;
46             if(dfs(0,0,1))printf("yes\n");
47             else printf("no\n");
48         }
49     }
50     return 0;
51 }


ps:为搜索生,为超时亡。

你可能感兴趣的:(HDU)