1 条题解

  • 1
    @ 2022-7-18 13:44:58

    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
    上传者