HDU - 1427 슈퍼 24 점 (DFS, 폭력)

속도 24 점

시간 제한 : 2000/1000 MS (자바 / 기타) 메모리 제한 : 32,768분의 65,536 K (자바 / 기타)
총 제출 (들) : 7037 허용 제출 (들) : 1857

 

문제 설명

나는 대부분의 사람들이 믿지 속도 24 점 해왔다. 이것은, A (1)을 포함하면 2,3,4,5,6,7,8,9,10, J (11), Q (12)를 임의의 네 카드를 제공하는 K (13)이다. '-', '*', '/'연산자, 최종 연산 결과가 24이되도록 괄호 (각각의 수는 한번만 사용되어야 함), 동작의 순서를 변경은 오직 '+'를 요구한다. 게임은 간단하지만, 상황이 해결책은 종종 매우 우울 사람들이 없다가 발생했습니다. 당신의 작업은 풀 수 있는지 여부를 결정하기 위해 무작위로 생성 된 네 개의 카드의 각 그룹을위한 것입니다. 우리는 특별히, 계산의 전체 과정은 소수를 표시 할 수 없습니다.

 
입력
한 줄에 입력 데이터의 각 세트는 4 개 개의 카드를 제공.
 
산출
입력 데이터의 각 세트는 하나 개의 출력 라인에 대응. 만약 출력의 해결의 가능성 "예", 해결책 후 출력 "아니오".
 
샘플 입력
2부터 3~6
3 3 8 8
 
샘플 출력
아니
 
생각
작업없이 순서 때문에, 우리는 연산에 대한 두 개의 숫자를 선택할 수 있습니다.
 
#INCLUDE <비트 / stdc ++ H.>
 사용  스페이스 성병; 

int로 A [ 4 ];
불리언 힘 [ 4 ], OK 플래그;
보이드 DFS ( INT의 현재) 
{ 
    / *  
    COUT << CUR << '\ n을'; 
    경우 (나는 <4] I = 0 값 int I ++) { 
        COUT << A [I] << '; 
    } 
    COUT << '\ n을'; * / 
    경우 (OK)
         ;
    경우 (현재의 == 3 ) 
    { 
        위해 ( int로 I = 0 ; I는 < 4 ; i가 ++ )
             만약(힘 [I] && A [I] == 24 ) 
                OK = ; 
                
        반환 ; 
    } 
    에 대해 ( int로 I = 0 ; i가 < 4 ; i가 ++ )
         경우 (힘은 [I])
             에 대한이 ( INT의 j는 = 나 + 1 , J < 4 ; J ++ )
                 경우 (힘은 [j]가) 
                { 
                    힘이 [j]가 = 거짓 ;
                    INT (X) = A [i]를, Y는 = A [J]을;
                    경우 (Y! =0 && (X) % y는 == 0 ) 
                        이 [I] = X / Y, DFS (현재 + 1 );
                    경우 (X! = 0 && %의 Y의 X == 0 ) 
                        이 [I] = Y / X, DFS (현재 + 1 ); 
                    A [I] =의 X - Y, DFS (현재 + 1 ); 
                    A [I] = Y - X, DFS (현재 + 1 ); 
                    A [I] = X + Y, DFS (현재 + 1 ); 
                    A [I] = X * Y, DFS (현재 + 1 ); 
                    A [I] =엑스; 
                    힘 [J]를 = ; 
                } 
} 

INT의 READ () 
{ 
     C [ 4 ] [ 4 ];
    INT 입술 = scanf와 ( " % S % S % S % S " , C [ 0 ], C [ 1 ], C [ 2 ], C [ 3 ]);
    위한 ( int로 I = 0 ; i가 < 4 ; i가 ++ ) 
    { 
        경우 (c [i]는 [ 0 ] == ' ' ) 
            이 [I]= 1 ;
        다른  경우 ([I] [C 0 ] == ' J ' ) 
            이 [I] = 11 ;
        다른  경우 (c [i]는 [ 0 ] == ' Q ' ) 
            이 [I] = 12 ;
        다른  경우 (c [i]는 [ 0 ] == ' K ' ) 
            이 [I] = 13 ;
        다른  경우 (c [i]는 [ 0 ] == ' 1 ') 
            A는 [I] = 10 ;
        다른 
            A [I] = (C)의 [I] [ 0 ] - ' 0 ' ; 
    } 
    memset 함수 (마주, 사실 , 는 sizeof (마주)); 
    OK = 거짓 ;
    돌아 ~ 입술을; 
} 

INT 의 main () 
{ 
#ifndef ONLINE_JUDGE 
   // freopen을 ( "in.txt", "R", 표준 입력);
   // freopen을 ( "out.txt", "w", 표준 출력); 
#endif 다음 
    상태 (READ는 ()) 
    { 
        / * 위해 (나는 <4] I = 0 int로 난 ++)
            COUT << A [I] << ""; 
        COUT << ENDL; * / 
        DFS ( 0 ); 
        풋 (OK ? " " : " 아니오 " ); 
    } 
}

 

 
 

추천

출처www.cnblogs.com/YY666/p/11276561.html