zoukankan      html  css  js  c++  java
  • CF573E Bear and Bowling(61)

    题意

    洛谷

    做法一

    考虑一种贪心(先别管对不对),设当前已选择的集合为\(A\),这是考虑该集合的补集,每个元素加进来后的增量为\(V_i\),则挑选最大的那个加入该集合

    结论1:遵循上述贪心,\(\forall i,j(i<j)\),满足\(a_i>a_j\),倘若选\(j\),集合中必定包含\(i\)

    归纳:
    \(i,j\)间没有任何元素在\(A\)中,显然成立
    假设若\(i\)加入集合,为\(k_1^{th}\)\(j\)\(k_2^{th}\),贡献差分一下,假设先选\(j\),即\(k_2a_j-k_1a_i-sum>0\)\(sum\)为中间被选元素和)
    显然必定存在某个元素\(a'<a_j\),与假设矛盾

    再来考虑这种贪心,假设固定\(A\),贪心加入\(x\),最优解不包含这个,可以用调整法简单证明将其中一个元素换成\(x\)一定不劣

    当本次选取\(x\)时,\(i\in [1,x),V_i+=a_x;i\in (x,n],V_i+=a_i\),故\(V_i\)总可表示成\(k_ia_i+y_i\)的形式

    具体做法

    将序列分块,维护\(O(\sqrt n)\)\((a_i,y_i)\)的凸壳,选取\(x\),对前面的块内元素的相对位置不发生影响,后面块的整体系数\(k_i+1\),本块需要重构一下

    做法二

    结论2:一定存在一个分界线\(k\),使得\(k\)之前都没选\(i\),而k之后都选\(i\)

    即证明不存在:\(F_{i,j}=F_{i-1,j-1}+j\times a_i\ge F_{i-1,j}(1),F_{i,j+1}=F_{i-1,j+1}\ge F_{i-1,j}+(j+1)a_i(2)\)
    归纳:设\(F_{i-1,j}\)没选\(i-1\)\(F_{i-1,j+1}\)选了\(i-1\)
    根据\((1)\)可得\(a_{i-1}\ge a_i\),可证明不存在\(F_{i-1,j-1}+j\times a_i\ge F_{i-1,j}\)
    另外两种情况也可讨论得出

    还有一种证明,不过我看不太透,感兴趣的可以点这里(结论\(2\)也来源于此)

    具体做法

    二分出分界线,然后后面那段加上一个等差数列

  • 相关阅读:
    java IO流之详细总结
    位运算了解与复习多线程
    java 常见面试题总结(一)
    复习集合框架
    【面试题】java中高以上必会技能
    python-项目流程分析及优化查询方法
    python-day97--django-ModelForm
    python-day97--git协同开发
    python-day96--git版本控制
    python-day91--同源策略与Jsonp
  • 原文地址:https://www.cnblogs.com/Grice/p/12249026.html
Copyright © 2011-2022 走看看