Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 一次锻炼——大厅里的猫_Algorithm - Fatal编程技术网

Algorithm 一次锻炼——大厅里的猫

Algorithm 一次锻炼——大厅里的猫,algorithm,Algorithm,长廊里有许多老鼠。给出了长度为n的数组,其中a[i]表示大厅第i米和第i+1米之间的老鼠数量 你有k只猫。每只猫都可以保护大厅的一个相连的部分。保护段可能不相交。某些区段可能没有防护 如果一只猫看守从大厅第i米到第j米的一段,其中s=a[i]+a[i+1]+…+当[j-1]老鼠居住时,它将捕获max(s-(j-i-1)^2,0)只老鼠 能捕获的最大老鼠数量是多少 我怀疑算法应该使用动态规划,但我不知道如何解决它 我没有任何代码,因为我还没有任何算法(我试图创建它),但我的想法到目前为止 我们不能

长廊里有许多老鼠。给出了长度为n的数组,其中a[i]表示大厅第i米和第i+1米之间的老鼠数量

你有k只猫。每只猫都可以保护大厅的一个相连的部分。保护段可能不相交。某些区段可能没有防护

如果一只猫看守从大厅第i米到第j米的一段,其中s=a[i]+a[i+1]+…+当[j-1]老鼠居住时,它将捕获max(s-(j-i-1)^2,0)只老鼠

能捕获的最大老鼠数量是多少

我怀疑算法应该使用动态规划,但我不知道如何解决它

我没有任何代码,因为我还没有任何算法(我试图创建它),但我的想法到目前为止

我们不能用感应wrt来计算猫的数量。这可能会产生错误的结果。例如,如果有一个部分,一只猫可以抓7只老鼠,两个不相交的地方,一只猫可以抓2只老鼠,那么我们从一只猫的结果中什么也得不到

因此,我们应该解决一个子段的问题,并根据子段的答案计算答案


但我不知道如何进一步。猫保护较小区域的效果比保护较大区域的效果更好

证明: 如果i>j |j-i-1 |<| j-i |=> (j-i-1)^2<(j-i)^2=> s-(j-i-1)^2>最大值(s-(j-i)^2,0)=> max(s-(j-i-1)^2,0)>=max(s-(j-i)^2,0)=> max(s-(j-i-1)^2,0)>=max(s-((j+j')-i-1)^2,0)=> 猫在较小的区域更有效。

由于猫在较小的区域有效,如果我们使用更多的猫,那么猫平均会保护较小的区域,因此,如果我们使用更多的猫,我们可以更有效地安排猫

这意味着应使用所有k猫。因此,我们已经排除了并非所有猫都被使用的所有情况。好的,除了猫超过米的情况,但这是一个很小的情况,你应该放一只猫/米来保护它


因此,当k时,我将首先生成所有可能的猫的单个位置(位置由覆盖的1米分段集定义,例如从3米开始,从2米开始),计算它们各自的值(在各自分段中捕获的老鼠数量),然后找到k(猫数量)的选择这样的放置使得放置不会重叠,并且价值最大化。由于给定两段可以轻松检查重叠,因此不必构造查找表

正如Lajos Arpad在他的回答中指出的那样,使用所有可用的猫总是更好的,因为范围更广/分段更长会受到惩罚。当您可以使用另一个cat将一个范围一分为二时,总值始终会增加

优化:

  • 消除跨越过多列的放置。例如:如果你的大厅有4米长,你有3只猫,你不能把猫放在3米的范围内

  • 消除由其他放置主导的放置。如果位置A跨越了位置B跨越的列的超集,但不会产生更多的鼠标,请忽略A。这可以显著减少可能的位置数量


实现:这种形式的问题适合于0-1整数线性规划。要查找的向量x的长度为p(放置数),每个位置包含1或0,具体取决于放置是否在解决方案中。解的值通常由放置的值之和给出。限制条件:1的数量是为什么会有这么多的反对票?更新(15个字符)你的问题有两个问题:1)你似乎试图让其他人做你的家庭作业(我知道你被卡住了,正在寻求帮助,这没关系,但可能不是正确的平台)2。)你的要求并不完全清楚。公式?算法?什么样的算法?最快的还是蛮力也行?我和我的同伴都在做作业。所以我想得到一个提示或者这个问题的解决方案。暴力很容易,我们可以简单地检查指数复杂性中的所有情况。但我需要更好的复杂性。问什么地方合适?问这个地方合适。有些人在看到有人提出与家庭作业有关的问题时,会盲目地投反对票。不在乎。我们所有人都是初学者,除此之外,您并没有要求解决方案,而是要求实现解决方案所基于的想法。请告诉我,我会给你一个答案(如果你的问题还没有结束的话)Alpha-beta剪枝很容易实现,但它是一种对抗性的算法,可以优化最小最大搜索问题。也就是说,它适用于您有竞争性或交替性需求/标准的情况,而这里的情况并非如此。对于这个问题,我认为动态规划/记忆是最有可能的最佳方法。@rbaryyoung,不同的行业相互竞争。如果您找到了一种优雅的方法来描述问题,那么您也可以用动态规划来解决它,但是,这样做有一些困难,因为在某些情况下需要间隙。想象一下,当你有你的最后一只猫和一个大的未覆盖区域时,康奈克斯子区域与其他未覆盖区域相比有相对多的老鼠。另外,当你在一个空旷的区域中间进行掩护时,你需要至少再养两只猫来掩护这个空旷的区域。我们需要考虑这些因素。我并不是说这个问题不能优雅地表述,但它是困难的。我把这件事比作国际象棋,如果没有如此优雅的方法来解决问题,或者如果没有发现问题,我会制定一个计划。不,他们没有。你犯的最基本的错误是陈述我