zoukankan      html  css  js  c++  java
  • [leetcode-343-Integer Break]

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.

    For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).

    Note: You may assume that n is not less than 2 and not larger than 58.

    思路:

    For any integer p strictly greater than 4, it has the property such that 3 * (p - 3) > p, which means breaking it into two integers 3 and p - 3 makes the product larger while keeping the sum unchanged. If p - 3 is still greater than 4, we should break it again into 3 and p - 6, giving 3 * 3 * (p - 6), and so on, until we cannot break it (less than or equal to 4) anymore.

    For integer 4, breaking it into 2 * 2 or keeping it as 4 does not change its contribution to the product.
    We cannot have more than two 4s, because 2 * 3 * 3 > 4 * 4. We cannot have more than three 2s because 3 * 3 > 2 * 2 * 2.

    int integerBreak(int n)
         {
             if (n == 2)return 1;
             if (n == 3)return 2;
             if (n == 4)return 4;
             if (n == 5)return 6;
             if (n == 6)return 9;
             return 3 * integerBreak(n - 3);
             
         }

    参考:

    https://discuss.leetcode.com/topic/43042/easy-to-understand-c-with-explanation

  • 相关阅读:
    SGU 194. Reactor Cooling(无源汇有上下界的网络流)
    SGU 197.Nice Patterns Strike Back
    Codeforces 474E
    记一个问题的AC
    UVM Primer
    UVM Primer
    UVM Primer
    UVM Primer
    UVM Primer
    UVM Primer
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/7070273.html
Copyright © 2011-2022 走看看