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:为搜索生,为超时亡。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号