小清新deque求调

P2627 [USACO11OPEN] Mowing the Lawn G

凉了,下节课就要学这东西了
by register_new @ 2022-11-11 22:34:11


改成这样吧? ```cpp if (!q.empty()) f[i] = f[q.front()] + e[i]; while (!q.empty() && f[q.back()] >= f[i]) q.pop_back(); while (!q.empty() && q.front() <= i - k) q.pop_front(); q.push_back(i); ```
by whdywjd @ 2022-11-12 08:32:33


@[whdywjd](/user/315448) 谢谢!
by Faith_toChange @ 2022-11-13 08:16:40


@[whdywjd](/user/315448) 但是似乎还不太对。。
by Faith_toChange @ 2022-11-15 16:06:07


```cpp #include <bits/stdc++.h> #define int long long using namespace std; const int maxn = 1e5 + 5; int n, k, e[maxn], f[maxn], sum; deque<int> q; signed main() { cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> e[i], sum += e[i]; } f[0] = 0, q.push_back(0); for (int i = 1; i <= n; i++) { while (!q.empty() && q.front() <= i - k - 1) q.pop_front(); if (!q.empty()) f[i] = f[q.front()] + e[i]; while (!q.empty() && f[q.back()] > f[i]) q.pop_back(); q.push_back(i); } int mn = 2e9; for (int i = n; i >= n - k - 1 && i; i--) mn = min(mn, f[i]); cout << sum - mn << endl; return 0; } ``` 以上代码有40分
by whdywjd @ 2022-11-15 17:22:07


|