This commit is contained in:
krahets
2023-12-02 06:24:11 +08:00
parent 5783c402bf
commit d20d8b3ee1
107 changed files with 1685 additions and 1745 deletions
@@ -3398,7 +3398,7 @@
<h1 id="154">15.4 &nbsp; 最大切分乘积问题<a class="headerlink" href="#154" title="Permanent link">&para;</a></h1>
<div class="admonition question">
<p class="admonition-title">Question</p>
<p>给定一个正整数 <span class="arithmatex">\(n\)</span> ,将其切分为至少两个正整数的和,求切分后所有整数的乘积最大是多少。</p>
<p>给定一个正整数 <span class="arithmatex">\(n\)</span> ,将其切分为至少两个正整数的和,求切分后所有整数的乘积最大是多少,如图 15-13 所示</p>
</div>
<p><a class="glightbox" href="../max_product_cutting_problem.assets/max_product_cutting_definition.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="最大切分乘积的问题定义" class="animation-figure" src="../max_product_cutting_problem.assets/max_product_cutting_definition.png" /></a></p>
<p align="center"> 图 15-13 &nbsp; 最大切分乘积的问题定义 </p>
@@ -3407,7 +3407,7 @@
<div class="arithmatex">\[
n = \sum_{i=1}^{m}n_i
\]</div>
<p>本题目标是求得所有整数因子的最大乘积,即</p>
<p>本题目标是求得所有整数因子的最大乘积,即</p>
<div class="arithmatex">\[
\max(\prod_{i=1}^{m}n_i)
\]</div>
@@ -3428,11 +3428,11 @@ n &amp; \geq 4
<p>接下来思考哪个因子是最优的。在 <span class="arithmatex">\(1\)</span><span class="arithmatex">\(2\)</span><span class="arithmatex">\(3\)</span> 这三个因子中,显然 <span class="arithmatex">\(1\)</span> 是最差的,因为 <span class="arithmatex">\(1 \times (n-1) &lt; n\)</span> 恒成立,即切分出 <span class="arithmatex">\(1\)</span> 反而会导致乘积减小。</p>
<p>如图 15-15 所示,当 <span class="arithmatex">\(n = 6\)</span> 时,有 <span class="arithmatex">\(3 \times 3 &gt; 2 \times 2 \times 2\)</span><strong>这意味着切分出 <span class="arithmatex">\(3\)</span> 比切分出 <span class="arithmatex">\(2\)</span> 更优</strong></p>
<p><strong>贪心策略二</strong>:在切分方案中,最多只应存在两个 <span class="arithmatex">\(2\)</span> 。因为三个 <span class="arithmatex">\(2\)</span> 总是可以替换为两个 <span class="arithmatex">\(3\)</span> ,从而获得更大乘积。</p>
<p><strong>贪心策略二</strong>:在切分方案中,最多只应存在两个 <span class="arithmatex">\(2\)</span> 。因为三个 <span class="arithmatex">\(2\)</span> 总是可以替换为两个 <span class="arithmatex">\(3\)</span> ,从而获得更大乘积。</p>
<p><a class="glightbox" href="../max_product_cutting_problem.assets/max_product_cutting_greedy_infer2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="最优切分因子" class="animation-figure" src="../max_product_cutting_problem.assets/max_product_cutting_greedy_infer2.png" /></a></p>
<p align="center"> 图 15-15 &nbsp; 最优切分因子 </p>
<p>总结以上,可推出以下贪心策略。</p>
<p>综上所述,可推出以下贪心策略。</p>
<ol>
<li>输入整数 <span class="arithmatex">\(n\)</span> ,从其不断地切分出因子 <span class="arithmatex">\(3\)</span> ,直至余数为 <span class="arithmatex">\(0\)</span><span class="arithmatex">\(1\)</span><span class="arithmatex">\(2\)</span></li>
<li>当余数为 <span class="arithmatex">\(0\)</span> 时,代表 <span class="arithmatex">\(n\)</span><span class="arithmatex">\(3\)</span> 的倍数,因此不做任何处理。</li>
@@ -3714,7 +3714,7 @@ n = 3 a + b
<p>使用反证法,只分析 <span class="arithmatex">\(n \geq 3\)</span> 的情况。</p>
<ol>
<li><strong>所有因子 <span class="arithmatex">\(\leq 3\)</span></strong> :假设最优切分方案中存在 <span class="arithmatex">\(\geq 4\)</span> 的因子 <span class="arithmatex">\(x\)</span> ,那么一定可以将其继续划分为 <span class="arithmatex">\(2(x-2)\)</span> ,从而获得更大的乘积。这与假设矛盾。</li>
<li><strong>切分方案不包含 <span class="arithmatex">\(1\)</span></strong> :假设最优切分方案中存在一个因子 <span class="arithmatex">\(1\)</span> ,那么它一定可以合并入另外一个因子中,以获更大乘积。这与假设矛盾。</li>
<li><strong>切分方案不包含 <span class="arithmatex">\(1\)</span></strong> :假设最优切分方案中存在一个因子 <span class="arithmatex">\(1\)</span> ,那么它一定可以合并入另外一个因子中,以获更大乘积。这与假设矛盾。</li>
<li><strong>切分方案最多包含两个 <span class="arithmatex">\(2\)</span></strong> :假设最优切分方案中包含三个 <span class="arithmatex">\(2\)</span> ,那么一定可以替换为两个 <span class="arithmatex">\(3\)</span> ,乘积更大。这与假设矛盾。</li>
</ol>