Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- #include <algorithm>
- #include <iomanip>
- #include <vector>
- #include <set>
- #include <map>
- #include <queue>
- #include <string>
- #include <cassert>
- #include <bitset>
- #include <initializer_list>
- #include <unordered_map>
- #include <unordered_set>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- int const INF = 1e9;
- ld const PI = acos(-1);
- ld const eps = 1e-7;
- ll const LLINF = 1e18;
- int const mod = 1e9 + 7;
- int const PH = 257;
- namespace std {
- template <typename U, typename V>
- struct hash<std::pair<U, V>> {
- std::size_t operator ()(std::pair<U, V> const& a) const {
- using std::hash;
- using std::size_t;
- return size_t((1LL * hash<U>()(a.first) * PH + hash<V>()(a.second)) % mod);
- }
- };
- }
- inline ll randll() {
- ll res = rand();
- for (int i = 0; i < 3; i++) {
- res <<= 16;
- res += rand();
- }
- return res;
- }
- inline ld log(ld a, ld b) {
- return (log(b) / log(a));
- }
- int const N = 1010;
- ll dp[2][3][N][N];
- int main() {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif // _DEBUG
- ios::sync_with_stdio(0);
- int n, s, v;
- cin >> n >> s >> v;
- vector <ll> f(n + 1, 0);
- for (int i = 1; i < n; i++) cin >> f[i];
- vector <int> w = { 0, s % v, v };
- int cnt = s / v;
- for (int k = 0; k < 2; k++) for (int last = 0; last < 3; last++) for (int i = 0; i <= n; i++) for (int j = 0; j <= cnt; j++) dp[k][last][i][j] = LLINF;
- dp[0][0][0][0] = 0;
- for (int i = 0; i < n; i++) for (int j = 0; j <= cnt; j++) for (int k = 0; k < 2; k++) for (int last = 0; last < 3; last++) {
- dp[k][0][i + 1][j] = min(dp[k][0][i + 1][j], dp[k][last][i][j]);
- if (!k && w[1]) dp[1][1][i + 1][j] = min(dp[1][1][i + 1][j], dp[0][last][i][j] + f[i] * w[last] * w[1]);
- if (j < cnt) dp[k][2][i + 1][j + 1] = min(dp[k][2][i + 1][j + 1], dp[k][last][i][j] + f[i] * w[last] * w[2]);
- }
- ll ans = LLINF;
- for (int last = 0; last < 3; last++) ans = min(ans, dp[bool(w[1])][last][n][cnt]);
- cout << ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement