动态规划+记忆化搜索

剪绳子

http://www.nowcoder.com/questionTerminal/57d85990ba5b440ab888fc72b0751bf8

public class Solution {

public int cutRope(int target) {
     if(target == 2){
         return 1;
     }

     if(target == 3){
         return 2;
     }

    int[] mem = new int[target+1];

    for(int i = 0 ; i<mem.length;i++){
        mem[i] = -1;
    }

    return func(target,mem);
}

private int func(int n,int[] mem){
    int max = 0;
    if(n==2){
        return 2;
    }
    if(n==3){
        return 3;
    }

    if(mem[n]!= -1){
        return mem[n];
    }
    for(int i = 2; i<= n-2; i++){
        max = max(func(i,mem)* func(n-i,mem),max);
    }

    mem[n] = max;

    return mem[n];
}


private int max(int i, int j){
    return i>=j ? i:j;
}

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务