繁体   English   中英

如何在这个问题中证明这种贪婪的方法

[英]How to prove this greedy approach in this problem

根据https://cses.fi/problemset/task/1085

最简单的数组分区方法是从左到右开始,只要你可以将当前数字添加到子集中并且它不超过最大值(通过二进制搜索找到这个值)然后将它添加到当前子集。 否则只需开始一个新的子集并重新做同样的事情

前任。 2 , 4 , 7 , 3 ,5 最大值是 8 使用上面的方法你会得到 [2,4] , [7] , [3,5]

我知道这种贪婪的方法有效。 但问题是如何在数学上证明这种方法?

如果我再次发现一些像这样的贪婪相关问题,我应该尝试证明它还是不需要证明每一个贪婪问题?

PS。 抱歉混淆了语言。 我希望你能理解我想要表达的意思。

这个解决方案有两个部分:二分查找和贪心分区。 二分搜索不是贪心算法,它依赖于函数的排序值。

对于二分搜索,我们知道如果有可能达到k个部分的分区中所有部分的最大和s ,我们必然可以通过拆分具有该最大和的部分之一来达到相同或更低的最大和 (当且仅当该部分是唯一持有最大值的部分时,所得最大值将更低)。

因此,在给定输入k的情况下,上述s的值是排序的——它们随着k的增加而单调下降,这意味着我们可以对它们进行二分搜索。

关于以目标最大值s分区时的贪心累加,我们可以说,如果我们仍然能够添加到一个部分并保持在s + 1以下,我们保证在分区中至少有一个部分的总和比如果我们没有添加价值。 添加该值并不能保证我们可以在此特定分区尝试中达到目标sk ,但添加它意味着我们不会尽最大努力使所有总和尽可能小,这违反了我们的意图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM