思路

不失一般性,首先想到dp,然后考虑状态转移方程
dp一般开始考虑数学归纳法: 0 1 2 3直接输出,4=2+2 ,5=2+ 3 ,6=3+3,7=3+4
假设c=a+b>=2sqrt(ab),当且仅当a==b时取等号。偶数直接分两半,奇数一个向下取整,一个向上取整。
这是两个数的时候,n个数,a1+a2+.....aN>=1/nsqrt(a1*a2....aN)
进一步发现:最终都可以分解为2和3了,并且3越多,乘积越大。
上面归纳3越多值越大是我看评论区的,真实情况是dp[i]=max(dp[i-2]2,dp[i-3]3);
参考3越多写了如下代码,为了炫技也写了只有一行的java代码

代码

switch写法

public class Solution {
    public int cutRope(int target) {
        switch (target%3){
                case 0:return (int)Math.pow(3,target/3);
                case 1:return (int)Math.pow(3,target/3-1)*4;
                case 2:return (int)Math.pow(3,target/3)*2;
        }
        return 0;
    }
}

一行代码

public class Solution {
    public int cutRope(int target) {
        return target%3==0?(int)Math.pow(3,target/3):
        (target%3==1?(int)Math.pow(3,target/3-1)*4:(int)Math.pow(3,target/3)*2);
    }
}