動態規劃問題系列 Disk Schedule

2021-07-22 14:29:50 字數 965 閱讀 9793

有很多從磁碟讀取資料的需求,包括順序讀取、隨機讀取。為了提高效率,需要人為安排磁碟讀取。然而,在現實中,這種做法很複雜。我們考慮乙個相對簡單的場景。

磁碟有許多軌道,每個軌道有許多扇區,用於儲存資料。當我們想在特定扇區來讀取資料時,磁頭需要跳轉到特定的軌道、具體扇區進行讀取操作。為了簡單,我們假設磁頭可以在某個軌道順時針或逆時針勻速旋轉,旋轉一周的時間是360個單位時間。磁頭也可以隨意移動到某個軌道進行讀取,每跳轉到乙個相鄰軌道的時間為400個單位時間,跳轉前後磁頭所在扇區位置不變。一次讀取資料的時間為10個單位時間,讀取前後磁頭所在的扇區位置不變。磁頭同時只能做一件事:跳轉軌道,旋轉或讀取。

現在,需要在磁碟讀取一組資料,假設每個軌道至多有乙個讀取請求,這個讀取的扇區是軌道上分布在 0到359內的乙個整數點扇區,即軌道的某個360等分點。磁頭的起始點在0軌道0扇區,此時沒有資料讀取。在完成所有讀取後,磁頭需要回到0軌道0扇區的始點位置。請問完成給定的讀取所需的最小時間。

輸入:

輸入的第一行包含乙個整數m(m),表示測試資料的組數。

對於每組測試資料,第一行包含乙個整數n(n),表示要讀取的資料的數量。之後每行包含兩個整數t和s(t),表示每個資料的磁軌和扇區,磁軌是按公升序排列,並且沒有重複。

輸出:

輸入的第一行包含乙個整數m(m),表示測試資料的組數。

對於每組測試資料,第一行包含乙個整數n(n),表示要讀取的資料的數量。之後每行包含兩個整數t和s(t),表示每個資料的磁軌和扇區,磁軌是按公升序排列,並且沒有重複。

樣例輸入:

3 1

1 10

3 1 20

3 30

5 10

2 1 10

2 11

樣例輸出:

830

4090

1642

變換磁軌需要400,而旋轉一周需要360,所以需要跳轉的磁軌數最少即可;

==按照磁軌有序讀取即可;

動態規劃問題系列 word break問題

給定乙個字串和乙個字典,在字串中新增空格來構造乙個句子,使句子中的每個單詞在字典中都存在 輸入 字串 輸出 所有可能的句子 例如 s catsanddog dict cat cats and sand dog 輸出 cats and dog和cat sand dog 將字串分割成2部分s1和s2,如...

動態規劃系列

有n件物品和乙個容量為 v的揹包,放入第i件物品的空間消耗是ci 得到的價值是wi 求解將哪些物品裝入揹包可使價值總和最大。基本思路 定義子問題 f i j 表示將前i個物品放入容量為j的揹包中。求解時只需考慮第i個物品放入或者不放入兩種可能 則有狀態轉移方程 f i j max else dp i...

整數劃分系列問題(動態規劃)

今天上演算法分析與設計課時,提到整數劃分問題,但是因為之前沒有很好地理解這一系列的問題。當被老師問到你們做演算法的應該會這個問題吧,我當時也不太記得,但是只能硬頭皮試著去寫了下,用的是brute force,老師果斷說我的方法跑不出正確的解,但是課堂上我也沒有去解釋了。課後自己驗證了一下,沒有問題,...