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 }

 

你可能感兴趣的:(HDU)