Submission #939207

#TimeUsernameProblemLanguageResultExecution timeMemory
939207qwe1rt1yuiop1Semiexpress (JOI17_semiexpress)C++14
100 / 100
545 ms22864 KiB
#include <bits/stdc++.h> #define int long long using namespace std; void solve() { int n, m, k, a, b, c, t; cin >> n >> m >> k >> a >> c >> b >> t; k -= m; vector<int> v(m); for (auto &i : v) cin >> i, --i; vector<vector<int>> add(m - 1, vector<int>(k + 1, 0)); for (int i = 0; i < m - 1; ++i) { int lft = t - c * v[i]; if (lft < 0) continue; add[i][0] = 1 + lft / a; add[i][0] = min(add[i][0], v[i + 1] - v[i]); lft -= b * add[i][0]; for (int j = 1; j <= k && lft >= 0; ++j) { add[i][j] = 1 + lft / a; add[i][j] += add[i][j - 1]; add[i][j] = min(add[i][j], v[i + 1] - v[i]); lft -= b * (add[i][j] - add[i][j - 1]); } } // for (auto i : add) // { // for (auto j : i) // cout << j << ' '; // cout << '\n'; // } vector<vector<int>> dp(m - 1, vector<int>(k + 1, 0)); dp[0] = add[0]; for (int i = 1; i < m - 1; ++i) { dp[i] = dp[i - 1]; for (int kk = 0; kk <= k; ++kk) dp[i][kk] = max(dp[i][kk], dp[i - 1][kk] + add[i][0]); for (int j = 1; j <= k; ++j) for (int kk = j; kk <= k; ++kk) dp[i][kk] = max(dp[i][kk], dp[i - 1][kk - j] + add[i][j]); } int ans = *max_element(dp[m - 2].begin(), dp[m - 2].end()); if (c * v.back() > t) --ans; cout << ans << '\n'; } /* 10 3 5 10 3 5 30 1 6 10 10 3 5 10 3 5 25 1 6 10 90 10 12 100000 1000 10000 10000 1 10 20 30 40 50 60 70 80 90 */ signed main() { ios::sync_with_stdio(0); cin.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...