这题与上一题不同,不能用动态规划,数组会越界,要有大数的处理。
当n>=5时,可以证明:2(n-2)>n,3(n-3)>n,并且3(n-3)>=2(n-2)。
所以尽可能将绳子以长度 3 等分为多段时,乘积最大。
方法一:贪婪算法
class Solution {
public:
int cuttingRope(int n) {
if(n<=3)
return n-1;
long res=1;
while(n>4){
res=res*3%1000000007;
n-=3;
}
return (int)(res*n%1000000007);
}
};