您好,登錄后才能下訂單哦!
本篇內容介紹了“Java怎么解決剪繩子問題”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
剪繩子問題
題目:
給你一根長度為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;
}
“Java怎么解決剪繩子問題”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。