Concert 관련하여 질문드립니다...

  • cspark89
    cspark89
    /*********************** Backtracking Case --> Time Over Error, Can't make it *****************************
    
    #include<iostream>
    
    using namespace std;
    
    class Vol_Info
    {
    public:
    
        int max_vol;
        int con_time;
        int start_vol;
    
        int input_vol[50];
    };
    
    int max_result_vol;
    
    void Controller(int depth, int Now_vol, Vol_Info TC)
    {
        if(Now_vol < 0 || Now_vol > TC.max_vol)
        {
            return;
        }
        else if(depth >= TC.con_time)
        {
            if(max_result_vol < Now_vol)
            {
                max_result_vol = Now_vol;
            }
            return;
        }
    
        else
        {
            Controller(depth+1, Now_vol - TC.input_vol[depth], TC);
            Controller(depth+1, Now_vol + TC.input_vol[depth], TC);
        }
    }
    
    int main(void)
    {
        int case_cnt;
        int loop = 0;
    
        int case_result[100];
        cin >> case_cnt;
    
        while(loop < case_cnt)
        {
            Vol_Info TC;                                                
            cin >> TC.con_time >> TC.start_vol >> TC.max_vol;
    
            max_result_vol = -1;
            for(int i=0;i<TC.con_time;i++)
            {
                cin >> TC.input_vol[i];
            }
            Controller(0, TC.start_vol,TC);
    
            case_result[loop] = max_result_vol;
            loop++;
    
        }
    
        for(int i=0;i<case_cnt;i++)
        {
            cout << case_result[i] << endl;
        }
    }
    
    ************************************** End of Backtracking Case *******************************************/
    
    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    class Vol_Info
    {
    public:
    
        int max_vol;
        int con_time;
        int start_vol;
    
        int input_vol[50];
    };
    
    int main(void)
    {
        int case_cnt;
        int loop = 0;
    
        int case_result[100];
    
        int max_result_vol = 0;
    
        cin >> case_cnt;
    
        vector<int> prev_volume;
        vector<int> volume;
    
        while(loop < case_cnt)
        {
            max_result_vol = -1;
            Vol_Info TC;                                                
            cin >> TC.con_time >> TC.start_vol >> TC.max_vol;
    
            for(int i=0;i<TC.con_time;i++)
            {
                cin >> TC.input_vol[i];
            }
            prev_volume.push_back(TC.start_vol);
    
            for(int j=0;j<TC.con_time;j++)
            {
                int temp = prev_volume.size();
                for(int i=0;i<temp;i++)
                {
                    if(prev_volume[i] - TC.input_vol[j] >= 0)
                    {
                        volume.push_back(prev_volume[i] - TC.input_vol[j]);
                    }
    
                    if(prev_volume[i] + TC.input_vol[j] <= TC.max_vol && prev_volume[i] + TC.input_vol[j] >= 0)
                    {
                        volume.push_back(prev_volume[i] + TC.input_vol[j]);
                    }
                }
                prev_volume.clear();
    
                temp = volume.size();
                for(int i=0;i<temp;i++)
                {
                    prev_volume.push_back(volume[i]);
                }
    
                if((j+1) < TC.con_time)
                {
                    volume.clear();
                }
            }
    
            int temp = volume.size();
            for(int i=0;i<temp;i++)
            {
                if(max_result_vol < volume[i])
                {
                    max_result_vol = volume[i];
                }
            }
    
            case_result[loop] = max_result_vol;
            volume.clear();
            prev_volume.clear();
            loop++;
        }
    
        for(int i=0;i<case_cnt;i++)
        {
            cout << case_result[i] << endl;
        }
    }
    

    위에 주석처리된 부분이 백트래킹을 활용한 구현이고

    아래는 벡터에 각 깊이 단위로 가능한 모든 계산을 하여

    마지막에 최대값을 찾는 방식입니다. 백트래킹은 시간 초과가되

    되어서 아래의 방법을 활용하였는데 런타임 에러를 도저히

    못 고치겠어서 질문드립니다. 제 컴퓨터에서는 잘 작동되는데

    어디가 문제인지 모르겠네요...


    12년 전
5개의 댓글이 있습니다.
  • kcm1700
    kcm1700

    push_back 하다가 메모리 부족해서 죽네요. 메모리 사용량을 계산해보세요.


    12년 전 link
  • cspark89
    cspark89

    감사합니다 수정해볼게요~


    12년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    kcm은 모르는 게 뭐야??


    12년 전 link
  • JongMan
    JongMan

    머릿속에 x86_64와 샌드박스 시뮬레이터가 있는듯


    12년 전 link
  • Being
    Being

    x86도 아니고 x86_64...........


    12년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.