1. 程式人生 > >瘋狂的bLue

瘋狂的bLue

你在 home div 美的 參考 cmp 需要 多少 efault

瘋狂的bLue

Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic

Problem Description

眾所周知神秘的 ACM 實驗室有一個史詩級的出題狂魔,名曰 bLue。最近 bLue 又露出了邪惡的笑,原來是 bLue 接了為校賽出題的單子。

距離校賽開始還有 N 小時,由於各種奇怪的原因出題組可以出題的時間並不固定,大致可以分為M個時間段。每個時間段可以出的題目數也可能不同。同時由於出題是個煞費心血的事情,所以每個出題時間段結束後,善良的 bLue 會讓大家休息 R (1 ≤ R ≤ N ) 小時,以便為接下來的出題事業繼續奮鬥。

為了能為校賽準備盡可能多的題目以備不時之需,bLue 需要好好地規劃好這 N 小時如何安排,當然作為唯一的長者,bLue 一下子就為大家規劃好了如何安排出題的時間段。

現在 bLue 想考考你在他完美的安排下出題組最多可以出多少個題目?

Input

測試數據有多組,輸入直到文件結束。

對於每組數據:

  • 第一行輸入三個數 N (1 ≤ N ≤ 1,000,000), M (1 ≤ M ≤ 1,000), R (1 ≤ R ≤ N)
  • 接下來有 M 行輸入,每一行輸入三個數 Si (0 ≤ Si < N), Ei (Si < Ei ≤ N) ,Vi (1 ≤ Vi ≤ 1,000,000) (0 < i <= M),分別表示為第 i 個時間段的開始時間,第 i 段的結束時間,第 i 個時間段可以出的題目數

Output

對於每組數據,輸出出題組最多可以出的題的數目。

Example Input

15 5 3
1 4 5
6 9 4
3 5 2
7 10 8
11 15 2

Example Output

13

Hint

假設出題組在第 5 小時出完了一個時間段的題,他們需要休息 3 小時 (R = 3),那麽他們在第 8 小時又可以繼續開始出題了。

Author

「“師創杯”山東理工大學第九屆ACM程序設計競賽 熱身賽」Ninaye 開始想成了貪心,後來發現是自己想的太簡單了,問了學長才知道是數位dp,參考了考試貼出的官方代碼寫出來的、、、
#include<iostream>
#include
<algorithm> using namespace std; typedef long long ll; struct node { int r,l,value; } mmp[10010]; ll dp[10010]; bool cmp(node a,node b) { if(a.r==b.r) return a.l < b.l; return a.r < b.r; } int main() { int n,m,R; while(cin >> n >> m >> R) { for(int i=0;i<m;i++) cin >> mmp[i].l >> mmp[i].r >> mmp[i].value; sort(mmp,mmp+m,cmp); dp[0] = mmp[0].value; ll ans = mmp[0].value; for(int i=1;i<m;i++) { ll maxn = 0; for(int j=0;j<i;j++) { if(mmp[j].r + R <= mmp[i].l)//判斷時間是否符合要求能行 maxn = max(maxn,dp[j]); } dp[i] = maxn + mmp[i].value;//更新dp,註意如果時間不行maxn為0的,還是初始化狀態,如果此時value大,那初始化狀態更新 ans = max(dp[i],ans); } cout << ans << endl; } return 0; }

瘋狂的bLue