題目描述作為乙個有很多遊戲想買但囊中羞澀的大學生,小明決定在這個暑假開始打工賺錢。經過一段時間的尋找,他一共找到了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 還給小明。因此小...