《演算法筆記》木棒切割問題P134

2021-10-22 16:39:11 字數 739 閱讀 3182

目前網路上大部分**均沒有考慮k=1時,最長長度l即為最長的木棒長度。這是因為,我們在將求解最後乙個滿足k>=k的問題轉換為求解第乙個滿足k給出n根木棒,長度均已知,現在希望通過切割它們來得到至少 k 段長度相等的木棒(長度必須是整數),問這些長度相等的木棒最長能有多長?

如果長度相等的木棒的長度l越長,那麼可以得到的木棒段數k越少 —— 單調遞減函式 k=f(l) 故用二分法!即為求解最後乙個滿足條件 k>=k 的長度l,轉換成求解第乙個滿足k#include

#include

#include

using

namespace std;

intf

(int a,

int n,

int l)

return k;

}int

solve

(int a,

int n,

int k)

else

}return left-1;

}//需要求解最後乙個滿足k>=k的長度l,即求解第乙個滿足k//但是要注意的是最後乙個k>=k可能是序列的最後乙個數,轉換成k//因此二分的邊界需要擴寬!

intmain()

;sort

(a,a+3)

;//給a按遞增排序目的是取最大的a[n-1]!

printf

("%d\n"

,solve

(a,3,7

));return0;

}

4 5木棒切割問題

木棒切割問題首先需要理解,是否可以有多個解,就來說本問題只有唯一解6,做本問題時可以考慮問題只有一解的情況 那麼可以採用計數的方法,判斷在何時取得七段相同的解,問題轉換為二分法的常規寫法。注意本題的mid是在函式的最後取中的,因為可能會遇到只要一段的 如下 include include using...

演算法筆記 木棒分割

include include include using namespace std intf int a,int mid return sum int binarysearch int a,int left,int right,int k else return left 1 int main ...

貪心演算法 木棒問題

1 問題描述 現有n根木棒,已知他們的長度和重量。要用一部木工機一根一根的加工這些木棒。該機器在加工過程中需要一定的準備時間,是用於清洗機器,調整工具和模板的。輸入 輸入有多組測試例。輸入資料的第一行是測試例的個數t。每個測試例兩行 第一行是乙個整數n 1 n 5000 表示有多少根木棒 第二行包括...