BOI2007 名次排序問題 sorting

2021-08-02 08:54:09 字數 2236 閱讀 1484

已知參賽選手的得分,你的任務是按照得分從高到底給出選手的排名。遺憾的是,儲存選手資訊的資料結構只支援一種操作,即將乙個選手從位置i移動到位置j,該移動不改變其他選手的相對位置,即如果i > j,位置j和位置i-1之間的選手的位置都比原來加1,相反如果 i < j,則位置i+1和位置j之間的選手的位置都比原來減一。上述移動的操作的代價定義為i+j,這裡,位置編號從1開始。請你程式設計確定乙個移動選手的步驟,將選手按照得分從高到低排序,並使整個移動過程的總代價最小。

檔案sorting.in第一行為乙個整數n(2<=n<=1000),表示選手的人數;接下來的n行,每行乙個非負整數si( 0<=si<=1000000),表示乙個選手的得分。你可以認為每人的得分是不同的。

檔案sorting.out的第一行為乙個整數,表示移動的次數,接下來的每一行表示乙個移動步驟,每個移動步驟用兩個整數i, j表示,表示位置i的選手移動到位置j, i和j之間有乙個空格隔開。

soring.in

5 20

30 5

15 10

sorting.out

2 2 1

3 5

本身我不想寫,因為我是按照《對一類動態規劃問題的研究》(湖南省長沙市第一中學 徐源盛)這篇**上的思路寫的**,但是網上都沒有**,於是我就寫了**,本著分享的原則,將這篇文章擷取下來吧。

同樣這題屬於當前決策對未來「行動」的費用影響只與當前決策有關的dp題目。

BOI2007 Sequence 序列問題

對於乙個給定的序列a1,an,我們對它進行乙個操作reduce i 該操作將數列中的元素ai和ai 1用乙個元素max ai,ai 1 替代,這樣得到乙個比原來序列短的新序列。這一操作的代價是max ai,ai 1 進行n 1次該操作後,可以得到乙個長度為1的序列。我們的任務是計算代價最小的redu...

P4392 BOI2007 Sound 靜音問題

數字錄音中,聲音是用表示空氣壓力的數字序列描述的,序列中的每個值稱為乙個取樣,每個取樣之間間隔一定的時間。很多聲音處理任務都需要將錄到的聲音分成由靜音隔開的幾段非靜音段。為了避免分成過多或者過少的非靜音段,靜音通常是這樣定義的 m個取樣的序列,該序列中取樣的最大值和最小值之差不超過乙個特定的閾值c。...

P4392 BOI2007 Sound 靜音問題

本題其實可以拆解程兩個問題,求區間最大值 求區間最小值。而這兩個操作都必須在 o log n 內完成。自然想到線段樹。線段樹需要維護兩個資訊 區間最大值 區間最小值。輸入完資料後,建樹。然後遍歷序列,求區間最大值最小值之差,再判斷是否大於 c 就可以了。記得立乙個 flag 方便記錄是否有解。很重要...