1 条题解
-
1
dp
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 1; int a[N], f[N], n, k, minn = INT_MAX; struct point { point(int v, int i) : val(v), id(i) {} int val; int id; }; deque<point> Q; void push(int x, int i) { while (!Q.empty() && x < Q.back().val) Q.pop_back(); Q.push_back(point(x, i)); while (Q.front().id < i - k + 1) Q.pop_front(); } int main() { cin >> n >> k; for (int i = 1; i <= n; i ++) cin >> a[i]; for (int i = 1; i <= k; i ++) f[i] = a[i], push(f[i], i); for (int i = k; i <= n; i ++) { if (i >= k) f[i] = Q.front().val + a[i]; push(f[i], i); } for (int i = n - k + 1; i <= n; i ++) minn = min(minn, f[i]); cout << minn << '\n'; return 0; }
- 1
信息
- ID
- 80
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 37
- 已通过
- 15
- 上传者