个人思路:

从小到大排序,因为一定先满足小的,再满足大的。

分组时,我们发现,同一组内的数在排序后的序列内连续,这样更优。因为(不会证)。

我们预处理出对于每个出书数量的答案,查询时直接输出即可。我们发现出书数量越多,满足人数越少,但是不能递推。

如果求出满足前 \(i\) 个时的最多出书数量 \(t_i\),我们就可以反推答案。但是也不能递推。

状态:\(dp_i\) 表示满足前 \(i\) 个时,前 \(i\) 个数最多分为多少组。

转移:

当 \(i < a_i\) 时,显然不能满足。此时 \(dp_i = 0\)。

否则,\(dp_i = \max\limits_{1\le j<i-a_i} dp_j + 1\),我们只需要划分至少 \(a_i\) 个数与 \(i\) 一组,剩下的数尽量多分。

答案:

对于 \(i < a_i\) 时,满足前 \(i\) 个时的最大出书数量 \(t_i\) 即为 \(n - a_i + 1\),即前 \(a_i\) 个分一组,剩余一个一组。

否则,满足前 \(i\) 个时的最大出书数量 \(t_i\) 即为 \(dp_i + n - i\),即前 \(i\) 个分 \(dp_i\) 组,剩余一个一组。

显然,对于 \(i < a_i\) 时,这个答案不一定最优,因为可以和后面的分成一组。于是,我们从右往左遍历,\(t_i \leftarrow \max(t_i, t_{i+1})\)。

反推答案,对于 \(t_{i+1} < p \le t_i\),\(ans_p = i\)。

然后稀里糊涂地过去了。

最新文章

  1. centos 终端 字体颜色
  2. json 转化
  3. linux ldconfig
  4. file的getPath getAbsolutePath和getCanonicalPath的区别
  5. WEB安全测试的类型
  6. linux OpenOffice
  7. Django学习-22-Form
  8. pycharm激活码
  9. Django 系列博客(七)
  10. java项目中文件含义
  11. js 2017
  12. B - Assignment
  13. hive 元数据库表描述
  14. BIOS备忘录之x86硬件编程(寄存器与IO)
  15. img格式镜像转ISO格式
  16. db2报错信息
  17. GCD - Extreme (II) UVA - 11426(欧拉函数!!)
  18. [HAOI2008]移动玩具(状压&amp;带权二分图)
  19. Tomcat------如何配置域名和80端口
  20. ios平台cocos2d-x播放音频、视频、音效的Demo(支持网络视频)

热门文章

  1. Ubuntu系统安装搜狗拼音输入法
  2. Oracle 详细-创建用户并导入sql文件
  3. c++ sizeof详解
  4. Spring的IOC源码分析
  5. Kubernetes 1.26.0 集群部署Prometheus监控
  6. 泛微e-cology OA 远程代码执行漏洞复现
  7. PostgreSQL权限管理
  8. java实现读取json文件指定字段值
  9. Kubernetes--Pod节点选择器nodeSelector(标签)
  10. [Swift]创建桥接文件,Swift使用MJRefresh刷新插件