首页 > 文章列表 > Java如何实现剪绳子问题的解决方案

Java如何实现剪绳子问题的解决方案

java
216 2023-05-02

剪绳子问题

题目:

给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...k[m]。

请问k[0]*k[1]*...k[m]可能的最大乘机是多少?

例如:当绳子的长度是8时,我们把他剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

int maxProductAfterCutting(int length){    if(length<2)return 0 ;    if(length==2)return 1;    if(length==3)return 2;//这里是2而不是下面的3,是因为最少要分割2次
   //products[i]存放的是第长度为i的绳子剪成若干段后,各段乘机的最大值,    int*products=new int[length+1];    products[0]=0;    products[1]=1;    products[2]=2;    products[3]=3;//这个地方与上面return是不同的,因为长度为3的绳子各段乘积的最大值是3
   for(int i=;i<=length;++i)//i是递增的,也就是绳子长度是递增的,先求出长度为i的乘机最大值,    {    //在求product[i]之前,对于每一个j(分割后每一小段绳子的长度)而言,product[j]都已经求出来了,并 //且结果保存在projects[j]里,为了求解product[j],需要求出所有可能的product[j]*product[i-j]并//比较他们的最大值。        for(int j=1;j<=(i/2);++j)        {            int product=product[j]*product[i-j];            if(max<product)                max=product;            product[i]=max;        }    }    max=products[length];    delete[] products;
   return max;
}