http://poj.org/problem?id=3276

题意:n(n<=5000)头牛站成线,有朝前有朝后的的,然后每次可以选择大小为k的区间里的牛全部转向,会有一个最小操作m次使得它们全部面朝前方。

问:求最小操作m,再此基础上求k。

首先不要看错题意,这不是一个求最小k的,而是求m最小时,k为多少,所以不能够使用二分进行解题,再看数据有5000头牛,则算法复杂度至多为 n^2 ,而首先k的遍历是必须的,这就已经是n了,那么就需要在遍历过程中的每个k求最小操作数时最多为n,也就是最多只能遍历一次就要求出相应k的最小操作数,由于是区间修改,所以可以借鉴之前的一道树状数组区间修改的题目,用一个sum表示所有包含当前位的区间的反转次数(在遍历过程不断更新),所以只需要在遍历过程在末尾加上前一位操作的反转次数,如果首元素已经波及不到当前元素则减去,最后对剩余牛进行遍历检验是否符合要求即可

(这个思路和上一篇博客那个牛踩踏板的思路相仿,

上一篇是对之前行的每个格子进行查询,如果不合格,通过改变当前行来改变之前行,最后查询最后一行是否合格即可

(也就是枚举第一行,然后只考虑下一行对之前行的影响,最后看最后一行是否满足要求)

这一篇则是对当前位的格子进行查询,如果不合格,改变当前格子,最后查询那些不能自行反转的格子即可

(也就是只考虑之前格子对当前格子的影响,不考虑后来格子对该格子的影响,然后一点点遍历下去,最后检查最后几个格子即可)

最新文章

  1. UnrealEd3视图导航
  2. 互联网+下PDA移动智能手持POS超市收银开单软件
  3. ABAP--在查询条件只包含部分索引字段时,如何使用索引
  4. JS获得事件发出者
  5. 在centos使用rpm包的方式安装mysql,以及更改root密码
  6. 二十、Android -- SDcard文件读取和保存
  7. Mysql 备份恢复之 Mysqldump 工具
  8. 带参数的查询防止SQL注入攻击
  9. Vim中常用的命令行
  10. JavaScript必知的特性(继承)
  11. JDBC中rs.beforeFirst()
  12. [HNOI2012]与非
  13. 基本 SQL 之增删改查(一)
  14. Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点( FROM IBM)
  15. 【题解】Luogu P3871 [TJOI2010]中位数
  16. 所做更改会影响共用模板Normal.dotm。是否保存此更改
  17. HashCode的理解
  18. easyui datagrid 本地json数据 实现删除
  19. java中替换双引号 Java问题通用解决代码 Java问题通用解决代码
  20. PE经典DIY案例1:全解开方案让量产PE也能

热门文章

  1. SVN提交文件失败:系统找不到指定路径
  2. js中文乱码
  3. java克隆机制
  4. 安装 tensorflow 时遇到 OSError: [Errno 1] Operation not permitted 的解决办法
  5. 解决jenkins运行selenium测试出错的问题
  6. ASP.NET的内置对象 —— Request 对象
  7. k8s集群搭建指南
  8. PHP 的 HTTP 认证机制
  9. elasticsearch 路由文档到分片
  10. httpclient cookie保持会话