AIZU-0033 Ball

AIZU-0033 Ball
Q: 중앙 방송국 빌딩 (Orz) 과 비슷 한 통 이 있 습 니 다. A 구 에서 공 을 넣 을 수 있 습 니 다. 넣 은 공 은 댐퍼 DE 를 통 해 B 바짓가랑이 나 C 바짓가랑이 에 빠 뜨 릴 수 있 습 니 다. 기 존의 1 - 10 레이 블 이 있 는 공 은 주어진 순서에 따라 A 구 에서 넣 을 수 있 습 니 다. 댐퍼 를 제어 하 는 전략 이 있 는 지 물 어보 면 B 바짓가랑이 와 C 바지 관 의 공 을 아래 에서 위로 표시 할 수 있 습 니 다.
  :         N。   N  N     ,      10   ,        。 
  :      ,     ,  YES;    ,  NO 
#include 
#include 
using namespace std;

void DFS(int* arr, int pos, int* res, int index, bool& flag) {
    if (pos >= 10||flag)          //               
    {
        return;
    }
    if ((index==0) || (index >= 1 && res[index - 1] < arr[pos]))   // A               pos    
    {                                                              //    ,   A  ,    B  
        res[index] = arr[pos];
        arr[pos] = 0;
    }
    DFS(arr, pos+1, res, index+1, flag);                          //         
    if (flag)
    {
        return;
    }
    int pre = 0;                                                  //A        ,  B      ?
    int cur = 0;                                                  //           
    flag = true;                    
    for (int i = 0; i < 10; i++)
    {
        if (arr[i]!=0)
        {
            pre = pre == 0 ? arr[i] : cur;
            cur = arr[i];
            if (cur < pre)
            {
                flag = false;
                break;
            }
        }
    }
}

int main()
{
    int N, arr[11], res[10];
    cin >> N;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cin >> arr[j];
        }
        bool flag = false;
        DFS(arr, 0, res, 0, flag);
        if (flag)
        {
            cout << "YES" << endl;
        }
        else
        {
            cout << "NO" << endl;
        }
    }
    system("pause");
    return 0;
}

좋은 웹페이지 즐겨찾기