KLIS 자꾸 오답의 이유를 모르겠습니다

  • 제유나
    제유나

    제가 푼 방법입니다

    #include

    using namespace std;

    double k;
    int n, a[500], cnt[500];
    int b[500], c[500], ch[500][500];

    void pre()
    {
    int cn[500] = { 0 };
    for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
    {
    ch[i][j] = 0;
    if (a[i] > a[j]) cn[i]++;
    }

    for (int i = 0; i < n; i++)
        cnt[cn[i]] = i;

    }

    int solve()
    {
    int max = 0;
    b[n - 1] = c[n - 1] = 1;
    for (int i = n - 2; i >= 0; i--)
    {
    b[i] = 1;
    for (int j = i + 1; j < n; j++)
    if (a[i] < a[j] && b[i] <= b[j])
    b[i] = b[j] + 1;

    c[i] = 0;
        for (int j = i + 1; j < n; j++)
            if (b[i] - 1 == b[j] && a[i] < a[j])
            {
                c[i] += c[j];
                ch[i][j] = 1;
            }
        if (c[i] == 0) c[i] = 1;
    
        if (max < b[i]) max = b[i];
    }
    
    return max;

    }

    void print(double count, int m, int j)
    {

    cout << a[j] << " ";
    
    if (m == 0) return;
    
    for (int i = 0; i < n; i++)
    {
        int l = cnt[i];
        if (ch[j][l] == 1)
        {
            if (count + c[l] >= k)
            {
                print(count, m - 1, l);
                return;
            }
            count += c[l];
        }
    }

    }

    int main()
    {
    int t;
    cin >> t;
    for (int i = 0; i < t; i++)
    {
    cin >> n >> k;
    for (int j = 0; j < n; j++)
    cin >> a[j];

    pre();
        int max = solve();
        double count = 0;
    
        cout << max << endl;
        for (int j = 0; j < n; j++)
        {
            int l = cnt[j];
            if (b[l] == max)
            {
                if (count + c[l] >= k)
                {
                    print(count, max - 1, l);
                    cout << endl;
                    break;
                }
                count += c[l];
            }
        }
    }

    }

    이유를 모르겠습니다.


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