int maxProductAfterCutting(int length){
if (length==3)
return 2;
if (length==2)
return 1;
long long ans,fact=1;
int max=0;
for (int i=2;i<=length;i++){
fact=1;
for (int j=1;j<=length/i;j++){
fact*=i;
}
ans=fact;
if (length%i!=0){
if (i*(length%i)>i+length%i)
ans*=(length%i);
else
ans=ans/i*(i+length%i);
}
if (ans>max)
max=ans;
}
return max;
}
自然想到了均值不等式
n个数字和定值,求n个数字乘积的最大值
这题小段绳子只能为整数,所以比较特殊,还有一个知识点就是,这n个数越集中,最终的乘积越大,同时我们并不知道有几段绳子,所以只能使用for循环一个一个试试。
小细节:3 3 3 3 1,3 3 3 4,显然后者更集中,所以最后还要判断一下