• 洛谷P5019 铺设道路(NOIP提高组 D1T1)题解 贪心


    题目链接:https://www.luogu.com.cn/problem/P5019

    解题思路:

    这道题目采用两种贪心思想都是可以解决的:

    1. 自底向上将一块块连通的位于同一层的填上;
    2. 从左到右将一段段最长的一段填上去。

    这里基于第2种思想。

    对染理论上来说 (n imes d le 10^9) 暴力可以过,但是我只拿了80分。

    所以可以批量更新,也就是说如果是下面这一组数据:

    2,6,6,6,6,2

    那么我可以将将区间 ([2,4]) 范围批量+4,需要4步。

    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 100010, INF = (1<<29);
    int n, d[maxn], dmax, ans;
    void handle(int L, int R, int d1) {
        if (L > R) return;
        int i = L;
        while (i <= R && d[i] == d1) i ++;
        if (i > R) return;
        int j = i;
        while (j+1 <= R && d[j+1] > d1) j ++;
        int d2 = INF;
        for (int k = i; k <= j; k ++) d2 = min(d2, d[k]);
        ans += d2 - d1;
        handle(i, j, d2);
        handle(j+1, R, d1);
    }
    int main() {
        scanf("%d", &n);
        for (int i = 1; i <= n; i ++) {
            scanf("%d", d+i);
            dmax = max(dmax, d[i]);
        }
        handle(1, n, 0);
        printf("%d
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    冲刺二6
    冲刺二5
    6月1日团队开发日志
    5月31日团队开发日志
    5月30日团队开发日志
    5月29日团队开发日志
    5月28日团队开发日志
    5月27日团队开发日志
    5月26日团队开发日志
    5月25日团队开发日志
  • 原文地址:https://www.cnblogs.com/quanjun/p/13137699.html
Copyright © 2020-2023  润新知