小明的打工計畫

2021-10-10 11:47:49 字數 1239 閱讀 9942

題目描述

作為乙個有很多遊戲想買但囊中羞澀的大學生,小明決定在這個暑假開始打工賺錢。經過一段時間的尋找,他一共找到了n個打工的招聘廣告,其中第i個打工的日期從li開始,到ri為止,一共付給他ci元錢。因為這些打工的時間都相互衝突,所以同一天小明最多參加乙個打工,並且乙個打工一旦開始,就必須一直工作到結束,不能中途退出。現在小明想要知道,這個暑假他打工最多能得到多少錢?

輸入資料

第一行乙個整數n(1≤n≤1000000),表示招聘廣告的數量。 接下來一共n行,每行3個整數li,ri,ci(1≤li≤ri≤1000000,1≤ci≤1000000000),表示打工的開始時間,結束時間和報酬。

輸出資料

一行乙個整數k,表示小明最多能夠得到的錢數。

樣例輸入

3

1 2 3

3 4 3

2 3 5

樣例輸出

6
解析: 1、理解樹狀陣列 

2、將廣告按照結束時間從小到大排列

3、動態規劃: dp[i][0] 表示 前i個廣告,第i個廣告不做的最大報酬;dp[i][1] 表示 前 i 個廣告,第i個廣告做的最大報酬。

dp[i][0] = max(dp[i-1][0], dp[i-1][1])

dp[i][1] = max(dp[s][0], dp[s][1]) + n[i].price

其中,s為結束時間 end < i 的開始時間 begin 的任務總數量。

完整**: 

#include#include#define ll long long 

using namespace std;

struct an[1000005];

ll dp[1000005][2];

int a[1001000];

//樹狀陣列對 任務的 結束日期進行統計。

int lowbit(int i)

int sum(int i)

return s;

}void add(int i)

return;

}int cmp(a a, a b)

int main()

ans=max(dp[n][1],dp[n][0]);

cout<}

小明的存錢計畫

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 小明的零花錢一直都是自己管理。每個月的月初媽媽給小明300元錢,小明會預算這個月的花銷,並且總能做到實際花銷和預算的相同。為了讓小明學習如何儲蓄,媽媽提出,小明可以隨時把整百的錢存在她那裡,到了年末她會加上20 還給小明。因此小...

小明的存錢計畫

小明的存錢計畫 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 小明的零花錢一直都是自己管理。每個月的月初媽媽給小明300元錢,小明會預算這個月的花銷,並且總能做到實際花銷和預算的相同。為了讓小明學習如何儲蓄,媽媽提出,小明可以隨時把整百的錢存在她那裡,到了年末她會加上20 ...

小明的存錢計畫

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 小明的零花錢一直都是自己管理。每個月的月初媽媽給小明300元錢,小明會預算這個月的花銷,並且總能做到實際花銷和預算的相同。為了讓小明學習如何儲蓄,媽媽提出,小明可以隨時把整百的錢存在她那裡,到了年末她會加上20 還給小明。因此小...