首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算法动态规划

算法动态规划
EN

Stack Overflow用户
提问于 2017-07-13 13:32:49
回答 1查看 153关注 0票数 0

您将看到一个由数字组成的数组(数组大小为10^5),您需要将该数组划分为K个分区(k<=500),以便每个分区的最小元素之和为最大

假设数组包含a1,a2,a3.......现在f(x) = min(a1,a2..ax) + min(a(x+1),a(x+2)...ay) +..........a(z+1)....a(n)

现在f(x)应该是最大值

其中分区必须是连续的。

所需的复杂性。(n*k)

我简单地逐个固定最大元素,并尝试看看它是否可以划分为K分区,如果可以,我计算了f(x)

EN

回答 1

Stack Overflow用户

发布于 2017-07-14 02:19:20

当分区数为i时设为dp[i] = f(x),其中f(x)由OP定义,现在开始求解--基本情况--

代码语言:javascript
复制
dp[n]=sum(array elements);
//ie when number of partitions is n we return sum of elements as each element is in different partition

现在,

代码语言:javascript
复制
dp[i-1] = dp[i] - min of partition collapsed in this step

因此,现在我们只需找到需要在每个步骤中折叠的分区。这可以通过暴力一次获取两个相邻的分区并保留最不利于分区崩溃的标签(可以在O(N)中完成)来完成。

因此,总体时间复杂度为O(n*n-k),空间复杂度为O(n)。好吧,这是技能的限制,任何人谁可以帮助提高欢迎。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45072116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档