洛谷P1280 尼克的任務

2021-07-25 09:25:36 字數 794 閱讀 8570

一道比較另類的dp,一開始沒想出來,覺得應該不用dp搞就能出來,然後看了題解發現原來這麼簡單。

dp【i】表示從i開始的最大空閒時間,逆序推dp,

分情況:

1:如果改時間沒有工作需要開始,那麼當然是要休息的,表示現在休息一分鐘,dp【i】=dp【i+1】+1

2:如果有需要開始的,那麼在所有需要開始的工作中選乙個最優的(廢話),dp【他們的末尾時間+1】最大的,來表示他們工作完之後最多能休息多長時間(注意恰好工作完的那一分鐘,即工作的最後一分鐘,不算休息)這就是+1的原因 ,為什麼?我們可以設想:對於每個任務,如果我做這個任務,那能得到的最大空暇時間是多少?就是工作完之後的最大空餘時間啊

不過,之所以要逆向推,你想啊。正向推的話,前面的選擇會對後面的造成影響,並且我們沒有辦法來記錄。

為什麼要逆序dp呢?因為不難發現,選擇是在任務的開始,不是任務的結束,要在同一起始點轉移狀態,必將從後往前,所以就有了本方法。

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

int begin[100005],end[100005],f[100005],n,k;

int main()

int point=k;

for(int i=n;i>=1;i--)}}

printf("%d\n",f[1]);

return

0;}

洛谷 P1280 尼克的任務

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

洛谷P1280 尼克的任務

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

洛谷P1280 尼克的任務

唔 本人高中狗乙隻 本人水平特渣,最近應該是要刷一些基礎題了 話不多說,今天在洛谷上看到乙個線性動規題目 如題 普及組水題,比較適合 尼克每天上班之前都連線上英特網,接收他的上司發來的郵件,這些郵件包含了尼克主管的部門當天要完成的全部任務,每個任務由乙個開始時刻與乙個持續時間構成。尼克的乙個工作日為...