[模拟赛] Pack

题目描述:

给定一个长度为 \(n\),元素只有 \(1\), \(2\) 元素的序列,你需要将这些元素按顺序装箱,每个箱子的大小为 \(w\),你可以进行一次操作:取出若干个元素将其随意排序放到最后。问最少需要多少个箱子?

解题思路:

一个细微的转化,将取出若干个元素将其随意排序放到最后,转化为选出若干元素,按顺序放入,剩下的元素放到最后做决定。(真的是如转化啊)

考虑 \(\text{dp}\)

f[i][j] 表示前 \(i\) 个数选 \(j\) 个按顺序填所需要的最少车辆数。

g[i][j] 表示前 \(i\) 个数选 \(j\) 个按顺序填最后一辆车最多能剩下多少空间。

转移显然。

前面的所有元素装好之后,因为剩下的元素我们可以按任意顺序放,所以我们贪心的放,先放 \(2\),放不了了我们再放 \(1\),再继续放 \(2\)......。

posted @ 2024-09-19 20:39  _huangweiliang  阅读(35)  评论(0)    收藏  举报