CF573E Bear and Bowling(6-1)
题意
做法一
考虑一种贪心(先别管对不对),设当前已选择的集合为\(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\)也来源于此)
具体做法
二分出分界线,然后后面那段加上一个等差数列
CF573E Bear and Bowling(6-1)的更多相关文章
- Codeforces 639E - Bear and Paradox(二分+贪心)
Codeforces 题目传送门 & 洛谷题目传送门 原来 jxd 作业里也有我会做的题 i 了 i 了 首先这种题目的套路就是先考虑对于一个固定的 \(c\),怎样求出得分最高的策略,而类似 ...
- poj 3176 Cow Bowling(dp基础)
Description The cows don't use actual bowling balls when they go bowling. They each take a number (i ...
- DP:Cow Bowling(POJ 3176)
北大教你怎么打保龄球 题目很简单的,我就不翻译了,简单来说就是储存每一行的总数,类似于状态压缩 #include <stdio.h> #include <stdlib.h> # ...
- CF573E Bear and Bowling 贪心、分块、凸包
传送门 题解搬运工++ 先证明一个贪心做法的正确性:做以下操作若干次,每一次考虑选择没有被选到答案序列中的数加入到答案序列中对答案的贡献,设第\(i\)个位置的贡献为\(V_i\),如果最大的贡献小于 ...
- CF573E Bear and Bowling
题目 我们设\(f_{i,j}\)表示前\(i\)个数中选\(j\)个的最大值. 那么显然有\(f_{i,j}=max(f_{i-1,j},f_{i-1,j-1}+j*a_i)\). 这个东西我们首先 ...
- 【CF573E】Bear and Bowling
[CF573E]Bear and Bowling 题面 洛谷 题解 首先有一个贪心的结论: 我们一次加入每个数,对于\(\forall i\),位置\(i\)的贡献为\(V_i = k_i\times ...
- salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesforce
本篇参考Trail教程: https://developer.salesforce.com/trailhead/force_com_dev_intermediate/apex_integration_ ...
- FreeCodeCamp 高级算法(个人向)
freecodecamp 高级算法地址戳这里. freecodecamp的初级和中级算法,基本给个思路就能完成,而高级算法稍微麻烦了一点,所以我会把自己的解答思路写清楚,如果有错误或者更好的解法,欢迎 ...
- JavaScript 风格指导(Airbnb版)
JavaScript 风格指导(Airbnb版) 用更合理的方式写 JavaScript 原文 翻译自 Airbnb JavaScript Style Guide . 目录 类型 引用 对象 数组 解 ...
随机推荐
- Go语言实现:【剑指offer】数值的整数次方
该题目来源于牛客网<剑指offer>专题. 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不 ...
- 编译生成protobuf的jar包
编译生成protobuf的jar包 配置maven 安装maven,并修改maven源为阿里云 下载maven wget http://mirror.bit.edu.cn/apache/maven/m ...
- 杭电1007-----C语言实现
这道题花了好久的时间才做出来,刚开始没有思路,最后看了网上的解答,好难得样子,每次都没有看完,但是掌握了大概思想,今天试着做了一下,已ac 主要思想:先将点对按照x排序,再在x排好序的基础上按照y来排 ...
- bootstrap4网格
Bootstrap 4 网格系统有以下 5 个类: .col- 针对所有设备 .col-sm- 平板 - 屏幕宽度等于或大于 576px .col-md- 桌面显示器 - 屏幕宽度等于或大于 768p ...
- .NET代码混淆工具NET Reactor - 初学者系列-学习者系列文章
这几天无事,除了看书,然后就倒腾原来的代码.想起.NET的代码混淆工具软件,所以今天就讲讲这个.NET代码混淆工具. .NET代码混淆工具软件,以前有了解和找过,但是当时需求不大,所以找了下就搁置了. ...
- JS获取最近三个月日期范围
function getLast3Month() { var now = new Date(); var year = now.getFullYear(); var month = now.getMo ...
- 搭建Linux(Ubuntu)系统下的Differential Datalog运行环境
DDlog is a bottom-up, incremental, in-memory, typed Datalog engine. It is well suited for writing pr ...
- 如何优雅的封装requests
搭建接口自动化测试框架,一般都要对post/get请求做封装. 一般的封装过程是, class MyRequest: def my_post(): """do somet ...
- [Contract] Solidity 遍历 mapping 的一种方式
思路:为需要遍历的 mapping 再准备一个 list,之后通过 for 循环遍历 list 取得 mapping 的 key. mapping (address => uint) users ...
- Windows2008R2 一键安全优化脚本
::author vim ::QQ 82996821 ::filename Windows2008R2_safe_auto_set.bat :start @echo off color 0a ...