剪绳子-推公式,DP,贪婪

 这道题答案是B。可以推出来公式:

对于第n次折叠,段数为:2^n + 1

 

剪绳子

 

 DP:

class Solution {
public:
    int cutRope(int number) {
        if(number<2) return 0;
        else if(number==2) return 1;
        else if(number==3) return 2;
        
        int f[number+1];  //把长度为i的绳子剪成若干段后各段长度乘积的最大值
        memset(f, 0, sizeof f);
        f[0] = 0;
        f[1] = 1;
        f[2] = 2;
        f[3] = 3;
        
        for(int i=4; i<=number; i++){
            for(int j=1; j<=i/2; j++){
                f[i] = max(f[i], f[j]*f[i-j]);
            }
        }
        return f[number];
    }
};

猜你喜欢

转载自www.cnblogs.com/Bella2017/p/11816958.html