import java.util.ArrayList;
public class Solution {
    public int cutRope(int target) {
        if(target==2){
            return 1;
        }
        if(target==3){
            return 2;
        }
        if(target==4){
            return 4;
        }

        //动态规划
        ArrayList<Integer> list = new ArrayList(){{
            add(0);
            add(1);
            add(2);
            add(3);
            add(4);
        }};

        for(int j=5; j<=target; j++){
            int max = 0;
            for(int i=2; i<=j/2; i++){
                if(list.get(i)*list.get(target-i)>max){
                    max = list.get(i)*list.get(target-i);
                }
            }
            list.add(max);
        }

        return list.get(target);


        /*
        //递归
        for(int i=2; i<=target/2; i++){
            int max1 = 0;
            int max2 = 0;
            if(i<=4){
                max1 = i;
            }else{
                max1 = cutRope(i);
            }

            if(target-i<=4){
                max2 = target-i;
            }else{
                max2 = cutRope(target-i);
            }            

            if(max1 * max2 > max ){
                max = max1 * max2;
            }
        }

        return max;
        */
    }
}