HDU1518 DFS

题意:给定一些木棒

询问是否能够组成正方形

直接暴力 DFS

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn = 24;
 7 int a[ maxn ];
 8 int vis[ maxn ];
 9 int n ,flag;
10 
11 void dfs( int pos,int len,int LEN,int sum ){//
12     if( flag==1 )
13         return ;
14     if( sum==3 ){
15         flag=1;
16         return ;
17     }
18     for( int i=pos;i<=n;i++ ){
19         if( vis[ i ]==0 ){
20             if( len+a[i]<LEN ){
21                 vis[ i ]=1;
22                 dfs( i,len+a[i],LEN,sum );
23                 vis[ i ]=0;
24             }
25             else if( len+a[i]==LEN ){
26                 vis[ i ]=1;
27                 dfs( 1,0,LEN,sum+1 );
28                 vis[ i ]=0;
29             }
30         }
31     }
32     return ;
33 }
34 
35 int main(){
36     int t;
37     scanf("%d",&t);
38     while( t-- ){
39         int sum=0;
40         scanf("%d",&n);
41         for( int i=1;i<=n;i++ ){
42             scanf("%d",&a[ i ]);
43             sum+=a[ i ];
44         }
45         if( sum%4!=0 ){
46             printf("no\n");
47             continue;
48         }
49         sort( a+1,a+1+n );
50         if( a[n]>( sum/4 ) ){
51             printf("no\n");
52             continue;
53         }
54         memset( vis,0,sizeof( vis ));
55         flag=-1;
56         dfs( 1,0,sum/4,0 );
57         if( flag!=-1 ){
58             printf("yes\n");
59         }
60         else{
61             printf("no\n");
62         }
63     }
64     return 0;
65 }

 

posted @ 2013-02-17 21:16  xxx0624  阅读(266)  评论(0编辑  收藏  举报