CF的题目:D. Colored Rectangles
发布日期:2021-05-25 15:01:43 浏览次数:20 分类:精选文章

本文共 561 字,大约阅读时间需要 1 分钟。

优化后的文章:

问题描述:选两对颜色不同长度的棍子组成正方形,求最大面积。经常会想到动态规划。

我们都知道,面积最大正方形就是长和宽相等的布局。所以,这个问题实际上是在寻找两对方差最小的长度,使得两者的乘积最大。这样可以通过动态规划来记录最优解。

关键点在于,动态规划中的转移方程需要考虑所有可能的组合。我们通过记录前一状态,选择当前最优的选择来更新下一状态。

具体来说,使用三维数组dp[i][j][k]表示前i个斜边,取了j个颜色斜边和k个颜色正方形的情况下的最大面积。但在这个特殊的问题中,我们只需要考虑两个颜色斜边的情况,所以可以简化逻辑。

转移方程核心思想:选择最后一个单元时,需要明确是在选择斜边还是正方形。如果斜边被选中,那么下一个单元只可能是一个正方形。同样地,如果选择正方形,那么下一个单元则是斜边或者正方形But我们需要一个归一化的方式,将之前的选择和当前的选择结合起来。

看代码,主要是初始化三个数组a、b、c分别存储三个颜色斜边的长度排序,然后通过多层循环计算最优值。三层循环分别是遍历每一颜色斜边的可能,即第一颜色斜边、第二颜色斜边和第三颜色正方形。每一阶段都刚我们更新下一状态的最大面积。

最终ans就是我们想要的最大面积。这个解法中的关键是多次比较不同的组合,确保每一个选择都是当前最优的解。

上一篇:A. Remove Smallest
下一篇:C. Good Subarraystime

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月10日 14时48分45秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章