zoukankan      html  css  js  c++  java
  • zoj4062

    题意

    直线上有(n)个植物,第(i)棵植物坐标为(i),浇一次水会长(a_i)高。
    你最开始在(0)点,执行(m)次操作。每次操作必须往左或右走一步并给走到的那棵植物(如果有)浇一次水。
    最大化(m)次操作后最矮的植物的高度。

    做法

    二分答案,题目转化成,每个位置要至少经过几次,然后求最小次数。

    考虑答案至少为(1)的情况:

    结论1:存在合法解最终停留在(n)(n-1)

    证明:
    由于答案至少为(1),所以一定到过(n)
    如果最后在(i)(i< n-1)),那么一定存在(ilongrightarrow i+1longrightarrow i+2longrightarrow i+1longrightarrow i)
    可以换成(ilongrightarrow i+1longrightarrow ilongrightarrow i+1longrightarrow i+2),反复通过调整法即可。

    结论2:存在,最终停留在(n)(n-1),且方案为(1,2,1,2,ldots,2,3,2ldots,n-1,n,n-1)

    证明:
    解形成了一个欧拉路,中间可以调换,容易证明。

    那么可以通过贪心得到次数。

  • 相关阅读:
    [JZOJ 5788] 餐馆
    [JZOJ 5778] 没有硝烟的战争
    problems_scala
    好迷茫,好迷茫啊
    公布下我的数据库操作层
    关于数据库大并发量(未完成)
    关于http协议头
    管理心得体会
    数据库表分区
    公共的Json操作类
  • 原文地址:https://www.cnblogs.com/Grice/p/14762326.html
Copyright © 2011-2022 走看看