Submission #1158938

#TimeUsernameProblemLanguageResultExecution timeMemory
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...