【问题标题】:Get a sum using as many numbers in a set as possible使用一组中尽可能多的数字求和
【发布时间】:2018-03-04 17:20:16
【问题描述】:

给定三个数字,它们都是正数。您可以加在一起的两个数字和一个最大值。我必须返回 最大 个我可以加在一起的数字,同时保持低于或刚好处于最大限制。换句话说:

为我提供了两个数字 nm,以及总和 s。找到 a+b 可能的最大数量,如果:

a * n + b * m <= s

如果这两个数字加起来正好等于总和,我确实认为我有一个可行的(但过于复杂和冗长的)解决方案,但如果有余数,那么它就会中断。

例如,如果两个数字是 3 和 5,总和是 54,那么答案就是 18。

【问题讨论】:

  • 能否也提供样例输入输出?
  • 你不会尽可能多地取两个数字中较小的那个,而另一个数字取零次吗?
  • nm 可以是负整数吗?
  • @Kyrylo 如果 n 或 m 为负数,则答案是无穷大。
  • @n.m.我觉得这个问题要求nm 具有讽刺意味,而你却用名字“n.m.”回答了

标签: python algorithm dynamic-programming


【解决方案1】:

答案将始终是m, n 中较小的一个将划分为s 的最大时间。

代码:

max_a_plus_b = divmod(s, min(n, m))

为什么:

答案 (a+b) 是 mn 实例的原始计数。如果你一开始就假设max_a_plus_bm, n 中较小者将在s 中div 的次数。然后将该因子减去一个,另一个因子再取一个,将得到相同的a+b,但更大的s,因此此时答案已经是最佳的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2019-04-12
    相关资源
    最近更新 更多