Submission #1159865

#TimeUsernameProblemLanguageResultExecution timeMemory
1159865HakunaSemiexpress (JOI17_semiexpress)C++20
0 / 100
1094 ms24136 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 5; long long n, m, k, a, b, c, t; vector<bool> used(N); vector< pair<int, int> > g[N]; int solve(int pos, int K) { if (K == 0) { vector<long long> d(n + 1, 1e18); d[1] = 0; set< pair<long long, int> > q; q.emplace(0, 1); while (!q.empty()) { auto [mn, v] = *q.begin(); q.erase(q.begin()); for (auto [to, w] : g[v]) { if (d[to] > mn + w) { q.erase({d[to], to}); d[to] = mn + w; q.emplace(d[to], to); } } } int ans = 0; for (int i = 2; i <= n; i++) { if (d[i] <= t) ans++; } return ans; } if (pos > n) return 0; // cerr << pos << ' ' << K << '\n'; int ans = 0; for (int i = pos; i <= n; i++) { if (used[i]) continue; used[i] = 1; for (int j = 1; j <= n; j++) { if (i == j || !used[j]) continue; if (j < i) g[j].push_back({i, c * (i - j)}); if (j > i) g[i].push_back({j, c * (j - i)}); } ans = max(ans, solve(pos + 1, K - 1)); for (int j = 1; j <= n; j++) { if (i == j || !used[j]) continue; if (j < i) g[j].pop_back(); if (j > i) g[i].pop_back(); } used[i] = 0; } return ans; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> k >> a >> b >> c >> t; for (int i = 1; i < n; i++) { g[i].push_back({i + 1, a}); } int s[m + 1]; for (int i = 1; i <= m; i++) { cin >> s[i]; for (int j = 1; j < i; j++) { int dif = s[i] - s[j]; g[s[j]].push_back({s[i], dif * b}); g[s[j]].push_back({s[i], dif * c}); } used[s[i]] = 1; } k -= m; cout << solve(1, k); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...