搾乳時間POJ - 3616

ベッシーは、このような勤勉な牛です。実際には、彼女は彼女が彼女の次のスケジュールを決定したことを彼女の生産性を最大化することに焦点を当てている  N  (1≤  N  1,000,000≤)時間(便宜0ラベル... Nを、彼女はできるだけ多くのミルクを生産するように、-1)。

ファーマージョンはのリストがある  Mを  (1≤  M  、彼は搾乳のために利用可能である可能性の重複区間千≤)。各区間  iは  開始時(0≤有する  starting_hour iは  ≤  Nを)、終了時間(starting_hour iは  <は  ending_hour iが  ≤  Nを)、および対応する効率(1つの≤  効率私は  何ガロンミルクの彼示し1,000,000以下)その間隔でベッシーから抜け出すことができます。ファーマージョンが開始され、それぞれ、開始時間の初めに搾乳し、時間を終了停止します。搾乳されている場合は、ベッシーは全区間を通じて搾乳する必要があります。

でも、ベッシーは、しかし、彼女の制限があります。任意の間隔の間に搾乳された後、彼女は休まなければなら  R  (1≤  Rの  ≤の  N彼女は再び搾乳を開始する前に)時間を。間隔のファーマージョンズリストを考えると、ベッシーをして生成することができます牛乳の最大量を決定  Nの  時間を。

入力

* 1行目:スリースペースで区切られた整数:  N、  M、および  R
*行2 .. M +1:ラインは  1はFJのi番目の区間withthreeスペースで区切られた整数を搾乳説明:  starting_hour  、  ending_hour I  、および  効率I

出力

* 1行目:中ベッシーができる製品牛乳のガロンの最大数  Nの時間

サンプル入力

4 2 12 
1 2 8 
10 19 12 
3 6 24 
7 10 31

サンプル出力

43 

翻訳:

ベッシーは勤勉な牛です。実際には、彼女はそう彼女の生産性を最大化することに焦点を当てたので、彼女は彼女ができるだけ多くを生成することができるように、次のN(1≤N≤1,000,000)時間(便利なラベル0..N-1)を配置することを決定しました。ミルク。

ファーマージョンが重複していてもよい間隔M(1≤M≤1,000)のリストを持って、彼はそこに搾乳することができます。各区間Iは開始時間(0≤starting_houri≤N)、終了時間(starting_houri <ending_houri≤N)、および対応する効率(1≤efficiencyi≤1,000,000)を持って、彼は牛乳の何ガロンを引き出すことができると言いました。当時ベッシー。ファーマージョン、それぞれ、開始時間と終了時間の始まりを開始し、搾乳を停止するとき。搾乳すると、ベッシーは全区間で搾乳する必要があります。

ベッシーには限界がありますが。任意の間隔の間に搾乳した後、彼女は再び搾乳開始前にR(1≤R≤N)時間を休まなければなりません。ファーマージョンズ間隔リストを考えると、生成することができますN-ベッシーの時間における牛乳の最大量を決定します。

 

小から大まで押し開始時間を、DP [i]はi番目の最大時間を示し、DP [I] = MAX(DP [J] + NO [I] .C、DP [I]):考えません。同様のアイデア最長DP上昇シーケンス。

 

1の#include <cstdioを>
 2の#include <fstreamの>
 3の#include <アルゴリズム>
 4の#include <cmath>
 5の#include <両端キュー>
 6の#include <ベクトル>
 7の#include <キュー>
 8の#include < ストリング >
 9#含む<CStringの>
 10の#include <地図>
 11の#include <スタック>
 12の#include < セット >
 13の#include <sstream提供さ>
 14の#include <入出力ストリーム>
15  の#define MOD十億七
 16  の#defineが長い長いっ
 17 使用して 名前空間STD;
 18である 
19。 int型N-、Mは、R
 20は、 構造体のノード 
 21である {
 22は     int型A、B、C; //終了時刻、C効率B、時間Aを開始します。
23である };
 24  BOOL PX(ノードQ、Pノード)開始時間によって//昇順ソート。
25  {
 26は     戻り QA < ; PA
 27  }
 28ノードNO [ 1005 ];
 29  INT DP [ 1005 ];
 30  INTがメイン()
 31は 、{
 32      scanfの(" %D%D%Dを"、&​​N、&M&R)。
33      のためには、int型 i = 0 ; iがm <; iは++ 34      {
 35          のscanf(" %D%D%D "、およびNO [I] .A、&NO [I] .B、&NO [I] .C) ;
36      }
 37      ソート(NO、NO + M、PX)。
38      INT ANS = 0 39      のためには、int型なかっ = Iを0 ; iがmを<; iは++ 40      {
 41          DP [I] = NO [I] .C。
42          のためのint型 J = 0; J <I、J ++ 43          {
 44              であれば(NO [I] .A> = NO [J] .B + R)
 45              {
 46                  DP [i]は= MAX(DP [J] + NO [I] .C、 DP [I])。
47              }
 48          }
 49          であれば(ANS < DP [I])
 50          {
 51の              ANS = DP [I]。
52          }
 53      }
 54      のprintf(" %d個の\ n " 、ANS)。
55 }

 

おすすめ

転載: www.cnblogs.com/mzchuan/p/11278433.html