传送门


题解搬运工

设原问题为问题A。每一次减少\(\min\{p_i , p_{i+1}\}\)难以处理,我们考虑将限制变得宽松一些:每一次可以减少\([1,\min\{p_i , p_{i+1}\}]\)的任意值,需要满足的终止条件与问题A相同。我们称其为问题B,设区间\([l,r]\)在问题B操作下的答案为\(g_{l,r}\)。显然问题B的答案要小于等于问题A。

再考虑:在问题AB中,最后的结果一定是两个正数之间有一段0。我们再考虑:设\(f_{l,r}\)表示只操作区间\([l,r]\)使得区间\([l,r]\)的值全部小于等于\(0\)(可以为负)的最小代价,设其为问题C。不难发现:设\(c_l = p_l\),\(c_i = \max\{p_i - c_{i-1} , 0\} , i \in [l+1,r]\),那么\(f_{l,r} = \sum\limits_{i=l}^r c_i\)。

首先,\(f_{l,l} = g_{l-1,l+1}\),\(f_{l,l+1} = g_{l-1,l+2}\),而

\(f_{l,r} = \sum\limits_{i=l}^rc_i = \sum\limits_{i=l}^{r-2}c_i + c_{r-1} + \max\{p_r - c_{r-1} , 0\} = f_{l,r-2} + \max\{p_r , c_{r-1}\} \geq f_{l,r-2} + f_{r,r}\)

不难发现中间漏掉了一个\(r-1\),相当于\(r-1\)不变为\(0\),而\([l,r-2]\)和\([r,r]\)变为\(0\),也就是说在最优情况中\(r-1\)会保留下来,即\(g_{l-1,r+1} = g_{l-1,r-1} + g_{r-1,r+1}\)。不断递归下去就可以知道\(g_{l-1,r+1}\)的最优情况中,极长的\(0\)连续段不会超过\(2\)。

因为极长\(0\)段小于等于\(2\),所以问题C中不会出现负数,所以问题C中构造的解在问题B中一定满足。至此我们完成了C到B的转化。

同时注意到问题B中的所有操作一定会让若干个数变为\(0\),所以在问题B中的可行操作在问题A中也一定可行(这个感性理解好了,不知道怎么严格证明),即在问题A中极长连续\(0\)段长度不会超过\(2\)

接下来考虑DP:设\(f_{i}\)表示以\(i\)结尾、选择\(i\)的\([1,i]\)的最优答案,转移考虑其之前选择多少个\(0\),并记下转移点。值得注意的是如果存在两个\(0\),那么最少步数一定是\(\max\{p_{i-1} , p_{i-2}\}\),即先对\(p_{i-1} , p_{i-2}\)做一次,剩下的一次再做完。最后还原DP结果输出构造方案即可。

值得注意的一点是如果\(f_i\)的操作过程中使得某个数变为负数是一定不优的,由问题C就可以知道这一点。

代码

最新文章

  1. PHP是弱类型语言,自动转换,强制转换
  2. Javascript--装饰器模式和观察者模式
  3. Javascript动画效果(二)
  4. NEC学习 ---- 模块 - 带点文字链接列表
  5. Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案
  6. Web Service测试利器 Postman
  7. Suricata+Barnyard2+Base的IDS前端Snorby
  8. 圣诞福利到!51Testing邀你一起来狂欢!有礼就是任性~(≧▽≦)/~
  9. 【原创教程】鲸吞HTML
  10. Maven坐标 groupId artifactId version packaging classifier name
  11. 解决linux看温度是报错No sensors found问题
  12. mac提升yosemite后php 扩展修复
  13. 使用Aspose.Cells利用模板导出Excel(C#)
  14. win7旗舰版安装IIS
  15. 解决linux中使用git,ssh每次都要输入密码
  16. Java注解(二):实战 - 直接使用对象列表生成报表
  17. Java面向对象编程思想
  18. C#控件之ComboBox控件使用
  19. Kerberos 互信免登陆
  20. MFC控件之Combo Box

热门文章

  1. nginx rewrite实战实例
  2. npx 使用教程
  3. jmeter(四十五)常用Beanshell脚本
  4. python skimage图像处理(三)
  5. 【深入学习linux】CentOS 7 最小化安装后的注意事项及一些必备组件的安装
  6. 【maven】命令
  7. Linux下的sleep()和sched_yield()(转)
  8. nanopi的ds18b20温度传感器测试
  9. Java的面向对象的原则
  10. asp.net msbuild 发布