• 【NOIP2013】花匠


    本题在洛谷上的链接:https://www.luogu.org/problemnew/show/P1970


    好多人都说用DP,其实无所谓,反正贪心就够了。

    我们想,第1盆一定要选,因为如果第2盆更矮,那么选择第1盆可以更优,如果第2盆更高,其实也是更优的,我们向下讨论第3盆,就会发现推到最后一定是对的;如果第1盆和第2盆一样高,那么选择哪盆是无所谓的。其实第1盆选择好后,那么接下来的选择其实也就确定了,可以发现就是要选择整个序列的最长波动子序列,挑出整个序列的波峰和波谷就好。但是别忘记相同元素的去重。

     1 #include <cstdio>
     2 
     3 inline int get_num() {
     4     int num = 0;
     5     char c = getchar();
     6     while (c < '0' || c > '9') c = getchar();
     7     while (c >= '0' && c <= '9')
     8         num = num * 10 + c - '0', c = getchar();
     9     return num;
    10 }
    11 
    12 const int maxn = 1e5 + 5;
    13 
    14 int h[maxn], ans;
    15 
    16 int main() {
    17     int n = get_num();
    18     for (int i = 1; i <= n; ++i)
    19         h[i] = get_num();
    20     for (int i = 1; i <= n; ++i) {
    21         if (i == 1 || i == n || (h[i] > h[i - 1] && h[i] > h[i + 1]) || (h[i] < h[i - 1] && h[i] < h[i + 1]))
    22             ++ans;
    23         if (i > 1 && i < n && h[i] == h[i + 1]) h[i] = h[i - 1];
    24     }
    25     printf("%d", ans);
    26     return 0;
    27 }
    AC代码
  • 相关阅读:
    个人总结08
    npm快速入门
    Activity简介
    SELinux
    正则表达式学习笔记(二)表达式的匹配原理
    git学习笔记(一)
    使用VSFTPD传输文件
    正则表达式学习笔记(一)正则表达式入门
    Linux基础(一)磁盘分区
    Shell脚本笔记(九)数组
  • 原文地址:https://www.cnblogs.com/Mr94Kevin/p/9865388.html
Copyright © 2020-2023  润新知