【问题标题】:Largest sum in list less than number列表中的最大总和小于数字
【发布时间】:2017-07-31 01:50:09
【问题描述】:

如果我有一个数字列表,我如何快速找到小于另一个数字的最大和。例如,在列表 {40,60,22,15,51,22,5,55,32,70} 中,小于 50 的最大和是什么。感谢您的帮助,因为我能找到的唯一解决方案是递归,这似乎效率低下。这是一个我当时无法解决的竞赛问题,从那以后一直让我感到沮丧。

【问题讨论】:

  • 我建议你关掉你的电脑。拿一张纸和一支铅笔。然后写下解决问题所需的步骤。想想如果有人给你一个数字列表,你会如何手工完成。
  • "因为我能找到的唯一解决方案是递归,这似乎效率低下" 不要担心效率。在担心性能之前,编写一个给出正确解决方案的程序很重要。
  • 我递归地解决了它,但我正在寻找更快的东西
  • 你的代码需要几秒钟的时间吗?
  • 这看起来像是一个动态规划问题。

标签: java


【解决方案1】:

这相当于动态规划中著名的背包问题。 可以这样想:你是个小偷,你想尽可能多地偷东西。你的背包有固定的尺寸,你只能拿那么多。有一个项目列表,每个项目都有一定的价值和大小。你想最大化被盗的价值。挑选哪些物品可以挑选哪些物品的最佳方式是什么? 所以在你的例子中,50 是背包的大小,数字是物品(这里的值 = 大小)。

希望这有帮助!

【讨论】:

    猜你喜欢
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2014-08-07
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多