[转]【剑指Offer】:剪绳子 练习:给你一根长度为n的绳子,请把绳子剪成整数长的m段,求可能的最大乘积是多少?

[转]【剑指Offer】:剪绳子

题目描述 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是6时,我们把它剪成长度分别为3、3的三段,此时得到的最大乘积是9。


给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是6时,我们把它剪成长度分别为3、3的三段,此时得到的最大乘积是9。
)

方法一:dp[length]法

计算每一个dp[length]的最大值

import java.util.*;
/**
 * @ClassName: TestA
 * Date: 2020/8/29 19:28
 * project name: 20200829
 * @Description:
 */
public class TestA {
    
    
    public int cutRope(int length) {
    
    
        if(lengtht <= 1){
    
    
            return 0;
        }
        if(length == 2){
    
    
            return 1;
        }
        if(length == 3){
    
    
            return 2;
        }
        int[] dp = new int[length+1];
        dp[1] = 1;
        dp[2] = 2;
        dp[3] = 3;
        for(int i=4;i<=length;i++){
    
    
            int ret = 0;
            for(int j=1;j<=i/2;j++){
    
    
                ret=Math.max(ret,dp[j]*dp[i-j]);
            }
            dp[i] = ret;
        }
        return dp[length];
    }

public static void main(String[] args) {
    
    
    TestA t = new TestA();
    System.out.println(t.cutRope(10));
}
}

结果:36

方法二:找规律法

找到比较小的几个整数的最优解的规律。
length=0, 最优解:无,返回0
length=1, 最优解:无,返回0
length=2, 最优解:1 1
length=3, 最优解:1 2
length=4, 最优解:2 2
length=5, 最优解:3 2
target=6, 最优解:3 3
length=7, 最优解:3 2 2
length=8, 最优解:3 3 2
target=9, 最优解:3 3 3
length=10,最优解:3 3 2 2

public class Solution {
    
    
    public int cutRope(int target) {
    
    
        if(target <= 1){
    
    
            return 0;
        }
        if(target == 2){
    
    
            return 1;
        }
        if(target == 3){
    
    
            return 2;
        }
      
        int length = target%3==0?target/3:target/3+1;
        int length2 = 3-target%3;
        int result = 1;
        for(int i=0;i<length;i++){
    
    
            result=result*(i<length-length2?3:2);
        }
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42005540/article/details/108299933