演算法程式設計(Java) 繩子剪裁問題

2021-09-19 19:15:00 字數 1001 閱讀 6053

有n根繩子,第i根長為li,現需要m根等長繩子。你可以對n根繩子進行任意剪裁(不能拼接),計算出這m根繩子最長的長度多少?

輸入描述:

第一行包括兩個整數n,m,含義如題所述(1 <= n,m <= 100000)

第二行包含n個整數,分別對應n根繩子的長度(0 < l[i] < 10^9)

輸出描述:

乙個數字,表示裁剪後最長的長度,保留兩位小數

示例1輸入:

3 43 5 4

輸出:2.50

解釋: 第一根和第三根繩子分別裁剪出一根2.50長度的繩子,第二根繩子剛好可以裁剪出兩根2.50的長度繩子,剛好4根。

裁剪後每根繩子的長度肯定是在0到max(原來繩子的長度)之間,要求出這個長度需要用二分查詢法來找

public

class

main

//找到最長的那根繩子,擷取後每根繩子的長度不可能大於它

int max = length[0]

;for

(int i =

1; i < n; i++

)//二分查詢法

double high = max;

double low =0;

double mid =0;

//計算按照最大長度裁剪得到的繩子根數

int count ;

是運算的精度

while

(high - low >

1.0e-6

) system.out.

println

(string.

format

("%.2f"

,mid));

}private

static

intcheckmax

(int

a,double maxlength)

return count;

}}

剪繩子 演算法 C 學習之路之剪繩子問題

基於c 實現剪繩子問題,既將一根長度為n的繩子,剪成m段,使m段的乘積最大。如,長度為10的繩子,最大乘積為36。使用動態規劃和貪心演算法實現,具體 如下 include stdio.h include stdlib.h include using namespace std 動態規劃問題 剪繩子問...

演算法程式設計 JAVA 八皇后問題

題目 在乙個8 8西洋棋盤上,有8個皇后,每個皇后佔一格 要求皇后間不會出現相互 攻擊 的現象,即不能有兩個皇后處在同一行 同一列或同一對角線上。問共有多少種不同的方法?解題思路 通過乙個int 8 8 的二位陣列構建棋盤,初始化為0,我們可以定義如果該位置擺放了皇后那麼該位置對應的二維陣列被置為 ...

動態規劃與貪心演算法 剪繩子問題

問題 給你一根長度為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。求解 1.動態規劃 求乙個問題的最優解 最...