题目:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
示例:
输入:8
输出:18
思路:和为定值时,当各个数大致相等时,得到乘积的最大值。(类似的题目,给定三角形或矩形周长,求何时面积最大)假设一共 m m m 个数,每个数为 x = n / m x = n / m x=n/m ,那么乘积为: y = x n / x y=x^{n/x} y=xn/x,对 x x x求导(推导过程见最后)得到当 x < e x<e x<e时,y随x增大而增大,当 x > e x>e x>e时,y随x增大而减小,x只能是整数,并且 y ( 2 ) < y ( 3 ) y(2)<y(3) y(2)<y(3),因此尽量拆成3。当num<=3时,分别考虑,当num>3时,共有3种情况:÷3余数为0,÷3余数为1,÷3余数为2。余数为0,直接全拆成3即可;余数为1,31<22,因此留一个3用于拆成22;余数为2,32>1*4,因此2留下即可。
code:
# -*- coding:utf-8 -*-
class Solution:
def cutRope(self, number):
# write code here
if number==0:
return 0
elif number==1:
return 0
elif number==2:
return 1
elif number==3:
return 2
elif number%3 == 0:
return 3**(number//3)
elif number%3 == 1:
return 4*3**(number//3-1)
elif number%3 == 2:
return 2*3**(number//3)
else:
return 0
参考公式:
y
=
f
(
x
)
g
(
x
)
,
ln
y
=
g
(
x
)
ln
f
(
x
)
y=f(x)^{g(x)}, \ln y=g(x) \ln f(x)
y=f(x)g(x),lny=g(x)lnf(x)
1
y
⋅
y
′
=
g
′
(
x
)
ln
f
(
x
)
+
g
(
x
)
f
′
(
x
)
f
(
x
)
\frac{1}{y} \cdot y^{\prime}=g^{\prime}(x) \ln f(x)+g(x) \frac{f^{\prime}(x)}{f(x)}
y1⋅y′=g′(x)lnf(x)+g(x)f(x)f′(x)
y
′
=
f
(
x
)
g
(
x
)
g
′
(
x
)
ln
f
(
x
)
+
f
(
x
)
g
(
x
)
g
(
x
)
f
′
(
x
)
f
(
x
)
y^{\prime}=f(x)^{g(x)} g^{\prime}(x) \ln f(x)+f(x)^{g(x)} g(x) \frac{f^{\prime}(x)}{f(x)}
y′=f(x)g(x)g′(x)lnf(x)+f(x)g(x)g(x)f(x)f′(x)
[ f ( x ) ⋅ g ( x ) ] ′ = f ′ ( x ) g ( x ) + f ( x ) g ′ ( x ) [f(x) \cdot g(x)]^{\prime}=f^{\prime}(x) g(x)+f(x) g^{\prime}(x) [f(x)⋅g(x)]′=f′(x)g(x)+f(x)g′(x)
推导过程:
y
=
x
n
x
y=x^{\frac{n}{x}}
y=xxn
l
n
y
=
n
x
⋅
l
n
x
lny = \frac{n}{x}\cdot lnx
lny=xn⋅lnx
d
l
n
y
d
y
⋅
d
y
d
x
=
−
n
x
2
⋅
l
n
x
+
n
x
⋅
1
x
\frac{d\ lny}{d\ y} \cdot \frac{d\ y}{d\ x} =- \frac{n}{x^2}\cdot lnx+\frac{n}{x} \cdot \frac{1}{x}
d yd lny⋅d xd y=−x2n⋅lnx+xn⋅x1
1
y
⋅
d
y
d
x
=
−
n
x
2
⋅
l
n
x
+
n
x
⋅
1
x
\frac{1}{y} \cdot \frac{d\ y}{d\ x} =- \frac{n}{x^2}\cdot lnx+\frac{n}{x} \cdot \frac{1}{x}
y1⋅d xd y=−x2n⋅lnx+xn⋅x1
d
y
d
x
=
(
−
n
x
2
⋅
l
n
x
+
n
x
1
x
)
⋅
y
=
(
−
n
x
2
⋅
l
n
x
+
n
x
⋅
1
x
)
⋅
x
n
x
\frac{d\ y}{d\ x} =(- \frac{n}{x^2}\cdot lnx+\frac{n}{x}\frac{1}{x})\cdot y=(- \frac{n}{x^2}\cdot lnx+\frac{n}{x}\cdot \frac{1}{x})\cdot x^{\frac{n}{x}}
d xd y=(−x2n⋅lnx+xnx1)⋅y=(−x2n⋅lnx+xn⋅x1)⋅xxn
=
(
n
x
2
⋅
(
1
−
l
n
x
)
)
⋅
x
n
x
=( \frac{n}{x^2}\cdot (1-lnx))\cdot x^{\frac{n}{x}}
=(x2n⋅(1−lnx))⋅xxn
当x>e时单调递减,x<e时单调递增。