洛谷:P1249:最大乘积


洛谷:P1249:最大乘积

题目

P1249:最大乘积

分析

高精度

首先,这道题目需要用到高精度乘法,但在本文中不展开说明,而只是给出一个比较精简的代码。

核心算法

先分析一个样本数据:如果数字的和是10,那么怎么拆分呢?

我第一个想到的是,算术平均大于几何平均:\(\frac{a+b}{2}\ge\sqrt {a\times b}\),而等号成立当且仅当\(a==b\)时。但是测了一下,发现不是这么简单。比如10=5+5,进一步变化为4+6,此时\(4\times 6=24\),但这不是最大的——最大的乘积出现在\(2\times 3\times 5\)。又试了几个,发现了另一个算法。

2开始,依次加3,加4……但保证最后还是\(2+3+4+...+k\lt n\),到最后,一定存在一个差值\(diff=sum+(k+1)-n\)。根据这个\(diff\),有几种处理方式:

  1. diff==0,那么k+1可以直接加入。
  2. diff==1,那么去掉2,最后一个k变成k+1即可。
  3. diff>=2,直接去掉某个等于diff的数即可。

这个算法的基础在于,对于比较大的n\((n/2)!\)一定比\(n/2\times n/2=n^2/4\)大。

答案

Solution

思考

(略)

上一篇 下一篇