切繩子(最大乘積)

2021-08-25 17:10:58 字數 865 閱讀 8670

題目:

一根繩子,長度為n公尺。將其切成幾段,每一段的長度都是整數。請給出一種切法,使得切成的各段繩子之間的乘積是最大的。注意,最少要切一下的。

即自然數n分解為n個自然數的和,求這n個數的乘積最大值

分析:(1)n<4時,拆分的最大乘積比原來小,2拆分成(1,1,)乘積為1,3拆分成(1,2)乘積為2;

(2)n=4時,拆分最大乘積與原來相等,4拆分成(2,2),乘積為4,;

(3)n>4時,拆分後最大乘積比原來大,如10拆分成(5,5)乘積為25,若拆分成(4,6)乘積為24,綜合其他情況可得,拆分的兩個數的差越小,乘積就越大,所以若n為偶數就拆分成(n/2,n/2),若n為奇數就拆分成(n/2,n/2+1)

解決方案:

(1)對於長度為n的繩子,若n>=4,將n拆分成差盡可能小的兩段a,b,再分別對a,b進行拆分,若任意一段小於4則不再拆分。

(2)若n<4,因為題目要求至少要切一下,所以當n=2時,乘積為1,當n=3時,乘積為2;

class mainelse if(a==2) else if(a==3) else if(a==4) else 

if(res==-1) else }

public static int devide(int a) else else

}

}}

優化方案:

由問題的分析可得,所有大於4的繩子經過遞迴式拆分之後最終都變成長度為2或3的小繩子,可得n=2*x+3*y,且y要盡可能大,總乘積為2^x*3^y,所以:

若n%3==2,y=n/3,x=1;

若n%3==1,剩下的不夠被2整除,應該再抽出乙個3,y=n/3-1,x=2;

若n%3==0,y=n/3,x=0

DFS BFS 最大乘積

今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度n的數字串,要求選手使用k個乘號將它分成k...

WinterEx 最大乘積

時間限制 1 sec 記憶體限制 128 mb 乙個正整數一般可以分為幾個互不相同的自然數的和,如3 1 2,4 1 3,5 1 4 2 3,6 1 5 2 4,現在你的任務是將指定的正整數n分解成若干個互不相同的自然數的和,且使這些自然數的乘積最大。只乙個正整數n,3 n 10000 第一行是分解...

YTU OJ 最大乘積

時間限制 1 sec 記憶體限制 128 mb 提交 292 解決 39 提交 狀態 討論版 命題人 acm4302 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?第一行乙個數 代表資料組數 每組資料共兩行 第一行兩個正整數n m,n,m 20 第二行給出n個整數,其中每個數的絕對值小...