#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |