RTE (SIGABRT: program aborted, probably assertion fail) 에러 질문드립니다.

  • juhyun16
    juhyun16

    안녕하세요. 런타임 에러가 나서 질문드립니다.

    동적계획법 packing문제를 풀고 있습니다. 어디가 잘못되어서 RTE가 뜨는지 잘 모르겠습니다. 제 코드 지적해주시면 감사하겠습니다.

    #define _CRT_SECURE_NO_WARNINGS
    #include <cstdio>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    #define for_item for(int item=1; item<=N; item++)
    #define for_vol for(int vol=1; vol<=W; vol++)
    #define pb push_back
    
    int numOftest;
    int main(int argc, char* argv[])
    {
        //freopen("input.txt", "r", stdin);
        for (scanf("%d", &numOftest); numOftest--; )
        {
            int N=0, W=0;
            scanf("%d %d", &N, &W);
    
            string *items = new string[N+1];
            //int *volume = new int[N];
            //int *wish = new int[N];
            vector<int> volume(N+1);
            vector<int> wish(N+1);
            string temp;
            for (int i = 1; i <= N; i++)
            {
                cin >> temp >> volume[i] >> wish[i];
                items[i] = temp;
            }
    
    
            vector<vector<int> > dp(N + 1, vector<int>(W + 1, 0));
            string* *selected = new string*[N + 1];
            for (int i = 0; i < N + 1; i++)
                selected[i] = new string[W + 1];
    
            for_item
            {
                for_vol
                {
                    if (volume[item] > vol)
                    {
                        dp[item][vol] = dp[item - 1][vol];
                        selected[item][vol] = selected[item - 1][vol] + " ";
                    }
    
                    else
                    {
                        if (dp[item - 1][vol] > dp[item - 1][vol - volume[item]] + wish[item])
                        {
                            dp[item][vol] = dp[item - 1][vol];
                            selected[item][vol] = selected[item - 1][vol] + " ";
                        }
                        else
                        {
                            dp[item][vol] = dp[item - 1][vol - volume[item]] + wish[item];
                            selected[item][vol] = selected[item - 1][vol - volume[item]] + " " + to_string(item) + " ";
                        }
                    }
                        //dp[item][vol] = max(dp[item - 1][vol], dp[item - 1][vol - volume[item]] + wish[item]);
                }
            }
    
            char item_idx[256];
            strcpy(item_idx, selected[N][W].c_str());
    
            char *str = strtok(item_idx, " ");
    
            vector<int> item_index;
    
            do {
                item_index.pb(atoi(str));
                str = strtok(NULL, " ");
            } while (str != NULL);
    
            printf("%d %d\n", dp[N][W], item_index.size());
            for (int i = 0; i < item_index.size(); i++)
                cout << items[item_index[i]] << '\n';
    
            delete[] items;
            for(int i=0; i<N+1; i++)
                delete[] selected[i];
            delete[] selected;
        }
    
        return 0;
    }
    

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