zoukankan      html  css  js  c++  java
  • BZOJ(begin) 1328 [Usaco2003 Open]Jumping Cows:贪心【波峰波谷模型】

    题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1328

    题意:

      给你一个长度为n的正整数序列。

      可以选任意个数字,只能从左往右选。

      偶数步答案加上这个数,奇数步减去这个数。

      问你最大答案。

     

    题解:

      对于一个递减区间,只能加上最高,减去最低,在中间部分不可能有操作(会使答案减小)。

      例如:

      

      [0,4]段单调递减。

      如果加上a[0],减去a[4],则在[0,4]这段区间内不可能再有任何有用的选择。

      所以贪心策略:

        找出每一个递减区间,加波峰,减波谷。

        另外对于最后一个区间,不用减波谷。

    AC Code:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #define MAX_N 150005
     5 
     6 using namespace std;
     7 
     8 int n;
     9 int ans=0;
    10 int cnt=0;
    11 int a[MAX_N];
    12 
    13 int main()
    14 {
    15     cin>>n;
    16     for(int i=0;i<n;i++)
    17     {
    18         cin>>a[i];
    19     }
    20     a[n]=0;
    21     for(int i=0;i<n;i++)
    22     {
    23         if(!(cnt&1) && a[i]>a[i+1])
    24         {
    25             ans+=a[i];
    26             cnt++;
    27         }
    28         if((cnt&1) && a[i]<a[i+1])
    29         {
    30             ans-=a[i];
    31             cnt++;
    32         }
    33     }
    34     cout<<ans<<endl;
    35 }
  • 相关阅读:
    020-请你说一说app测试的工具
    栈的压入、弹出序列
    包含min函数的栈
    顺时针打印矩阵
    二叉树的镜像
    树的子结构
    链表中倒数第k个结点
    调整数组顺序使奇数位于偶数前面
    数值的整数次方
    矩形覆盖
  • 原文地址:https://www.cnblogs.com/Leohh/p/7555003.html
Copyright © 2011-2022 走看看