제출 #1158938

#제출 시각아이디문제언어결과실행 시간메모리
1158938raphaelpSki 2 (JOI24_ski2)C++20
9 / 100
1175 ms1892 KiB
#include <bits/stdc++.h>
using namespace std;
int main()
{
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);
    long long N, K;
    cin >> N >> K;
    long long MAXX = 1000000000000000000;
    vector<pair<long long, long long>> Tab;
    vector<long long> Hs;
    for (long long i = 0; i < N; i++)
    {
        long long h, c;
        cin >> h >> c;
        Tab.push_back({h, c});
        Hs.push_back(h);
    }
    sort(Tab.begin(), Tab.end());
    sort(Hs.begin(), Hs.end());
    vector<long long> minn(N + 1, MAXX);
    for (long long i = 0; i < N; i++)
    {
        minn[i] = Tab[i].second;
        if (i > 0)
        {
            minn[i] = min(minn[i], minn[i - 1]);
            Hs[i] = max(Hs[i], Hs[i - 1] + 1);
        }
    }
    vector<vector<long long>> dp(N + 1, vector<long long>(N + 1, MAXX)), dp2(N + 1, vector<long long>(N + 1, MAXX));
    dp[0][1] = 0;
    long long buff = 0, best = MAXX, prev = 0;
    for (long long i = 0; i < N; i++)
    {
        prev = buff;
        while (buff < N && Tab[buff].first <= Hs[i])
            buff++;
        for (long long j = 0; j < N; j++)
        {
            for (long long k = 1; k <= N; k++)
            {
                if (dp[j][k] >= MAXX)
                    continue;
                dp2[j][k] = min(dp2[j][k], dp[j][k] + (buff - j) * K);
                for (long long l = min(buff, j + k); l <= buff; l++)
                {
                    long long add = l - min(l, j + k);
                    dp2[l][k + add] = min(dp2[l][k + add], dp[j][k] + (minn[((prev == 0) ? N : (prev - 1))] * add) + (buff - l) * K);
                }
            }
        }
        for (long long k = 0; k < N + 1; k++)
            best = min(best, dp2[N][k]);
        swap(dp, dp2);
        dp2.assign(N + 1, vector<long long>(N + 1, MAXX));
    }
    cout << best;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...