动态规划 美观程度(mg)

来源:互联网 发布:淘宝卖家店铺名称 编辑:程序博客网 时间:2024/04/28 06:51

(mg)某公司运进一批箱子,总数为N(1≤N≤1000)由“传送带”依次运入,然后在仓库内至多排成P(1≤P≤4)列,(如图8所示)。
现已知运来的箱子最多为M(1≤M≤20)种,想把同一种类的箱子尽量排在一起,以便美观。“美观程度”T定义为:T=Σ(每列依次看到的不同种类数);所谓“依次看到的不同种类数”即为:如果某一列中第K个箱子与第K-1个箱子种类不同,则“美观程度”的值加1。求一种调动安排,使各列的“美观程度”值的和最小。(只输出最小值)
样例输入:
30 10 4
1 1 8 2 3 7 3 2 4 4 1 5 1 8 1 3 9 4 7 3 7 8 7 3 2 3 5 3 8 3
输出
12

容易得到状态转移方程
f[i][a1][a2][a3][a4]=max(f[i1][q1][q2][q3][q4]+dist)
f[i][a1][a2][a3][a4]表示前i个物品,每一列的最后一个物品分别是a1,a2,a3,a4的最小美观程度。这个方程是容易想到并且有效的避免了后效性。
让我们来分析一下空间复杂度。显然,这个数组是开不下的。那么就进行滚动数组的优化,这样的空间复杂度就可以满足了。
在设计循环的时侯,针对P分类讨论。可以由当前阶段的状态向后进行转移。这样可以降低编程复杂度。
这个题十分有意义一编,因为数组的维数其实是由p决定的。所以编程的时候需要分情况讨论。加上滚动数组的运用以及初始化的必要性,使此题的代码在dp中算长的。

0 0
原创粉丝点击