• 杂题


    题意

    有一个贪心求最大子段和的方法,将负数位置去掉,比较各段和的最大值
    现给出长度为(2n-1)的序列,对于奇数位置,已经有数了,你需要在偶数位置填入(in[-K,K])的整数,求正确答案与贪心答案最大差
    (nle 5000,Kle 10^5)

    做法

    结论1:每个位置要么填(-1),要么填(K)

    对于已有数已经为负的情况,是可以分割的。考虑平凡情况:已有数均(ge 0)
    (f_{k,i})为前(i)个位置,填了(k)(-1),贪心答案的最小值
    (f_{k,i}=min{max(f_{k-1,j},sum_i-sum_j)})

    结论2:固定(k,i),存在分界点,使得在([1,alpha])最大值为(sum_i-sum_j)((alpha,i))最大值为(f_{k-1,j})

    固定(k),令(g_i)(f_{k,i})的分界点
    结论3(g_i)是不降的

    证明:
    满足最大值为(sum_i-sum_j)的条件为(f_{k-1,j}le sum_i-sum_jLongrightarrow sum_ige f_{k-1,j}+sum_j)
    由于(sum_i)是不降的,故分界点也不降

    于是可以做到(O(n^2))

  • 相关阅读:
    Django-xadmin
    Django-DRF框架中认证与权限
    Django-DRF视图集
    Django-DRF序列化器
    javascript
    web-api
    ES6语法
    Redis缓存雪崩、击穿、穿透
    Jetbrains IDEA 系列软件最新crack方案
    jmeter设置代理服务器录制脚本
  • 原文地址:https://www.cnblogs.com/Grice/p/13871320.html
Copyright © 2020-2023  润新知