Luogu 1280 尼克的任務

2022-05-12 14:29:20 字數 1173 閱讀 9700

尼克每天上班之前都連線上英特網,接收他的上司發來的郵件,這些郵件包含了尼克主管的部門當天要完成的全部任務,每個任務由乙個開始時刻與乙個持續時間構成。

尼克的乙個工作日為n分鐘,從第一分鐘開始到第n分鐘結束。當尼克到達單位後他就開始幹活。如果在同一時刻有多個任務需要完成,尼克可以任選其中的乙個來做,而其餘的則由他的同事完成,反之如果只有乙個任務,則該任務必需由尼克去完成,假如某些任務開始時刻尼克正在工作,則這些任務也由尼克的同事完成。如果某任務於第p分鐘開始,持續時間為t分鐘,則該任務將在第p+t-1分鐘結束。

寫乙個程式計算尼克應該如何選取任務,才能獲得最大的空暇時間。

輸入資料第一行含兩個用空格隔開的整數n和k(1≤n≤10000,1≤k≤10000),n表示尼克的工作時間,單位為分鐘,k表示任務總數。

接下來共有k行,每一行有兩個用空格隔開的整數p和t,表示該任務從第p分鐘開始,持續時間為t分鐘,其中1≤p≤n,1≤p+t-1≤n。

輸出檔案僅一行,包含乙個整數,表示尼克可能獲得的最大空暇時間。

15 6

1 21 6

4 11

8 58 1

11 5

dp這題的轉移方式非常簡單,就是兩個式子:

當前時刻沒有工作開始我們就從前乙個時刻轉移:\(dp[i]=dp[i+1]+1\)

當前時刻有工作開始我們從所有(以當前時刻為開始時刻的工作的)結束時間(區間對應的\(r\))轉移:\(dp[i]=max(dp[i],dp[i+len])\)(\(i+len\)就是前文的\(r\))。

這裡按這種轉移方式的話,我們是應該逆著轉移的。

然後我就怎麼也想不明白為什麼不能順著推。花了我一下午,qwq。

如圖:你看上面的線段,如果我順著推的話,我們由ab,ef組成的更優的答案就會被cd在轉移過程中覆蓋掉,但是在逆著推的情況下,我們ab,ef組成的答案就會作為更優解被保留下來。

對就是這樣qwq。

總而言之,對於每乙個任務結束時的情況我們是不能覆蓋掉的,最優解只能從不同任務結束時轉移而來,因為我們這一題的本來就是要在空閒時遇到任務就必須要接任務,但是又沒有規定任務結束的時間。

換而言之,我們的答案是沿著我們規定的方向轉移來的,但是,最先開始的任務規定了一定要接,而沒有任何規定說最後結束的任務一定要接,所以我們的解一定會包含最開始的任務,卻不一定會包含最後結束的任務,這就是區別。

luogu1280 尼克的任務 (線性dp)

題目描述 尼克每天上班之前都連線上英特網,接受他的上司發來的郵件,這些郵件包含了尼克主管的部門當天要完成的全部任務,每個任務由乙個開始時刻與乙個持續時間構成。尼克的乙個工作日為n分鐘,從第一分鐘開始到第n分鐘結束。當尼克到達單位後他就開始幹活。如果在同一時刻有多個任務需要完成,尼克可以任選其中的乙個...

P1280 尼克的任務

題目描述 尼克每天上班之前都連線上英特網,接收他的上司發來的郵件,這些郵件包含了尼克主管的部門當天要完成的全部任務,每個任務由乙個開始時刻與乙個持續時間構成。尼克的乙個工作日為n分鐘,從第一分鐘開始到第n分鐘結束。當尼克到達單位後他就開始幹活。如果在同一時刻有多個任務需要完戍,尼克可以任選其中的乙個...

LG 1280 尼克的任務

題目描述 尼克每天上班之前都連線上英特網,接收他的上司發來的郵件,這些郵件包含了尼克主管的部門當天要完成的全部任務,每個任務由乙個開始時刻與乙個持續時間構成。尼克的乙個工作日為n分鐘,從第一分鐘開始到第n分鐘結束。當尼克到達單位後他就開始幹活。如果在同一時刻有多個任務需要完成,尼克可以任選其中的乙個...