ジョンはやるべき仕事がたくさんあります。農場の効率的な運用を可能にするために、彼は彼の仕事に依存しているとお金を稼ぐ、各ジョブの時間の単位を費やす必要があります。単位時間あたりの時間0の初め、10 ^ 9から彼の営業日。いずれかの時点で、彼は1〜N N(1 <= N <= 10 ^ 6)行われる作業における作業項目のいずれかの番号を選択することができます。彼は唯一の単位時間当たりの作業を行うことができ、それぞれが仕事の期限を持っているので、それが可能であるが、彼は、すべてのNの作業が完了するまでの時間を持つことが困難であるため。i番目の作業のために、期限D_I(1 <= D_I <= 10 ^ 9)、彼はこれを行うことができた場合には、その後、彼は。利益P_I(1 <= P_I <= 10 ^ 9)を行うことができますがあります与えられた営業利益と期限の下で、ジョンはどのくらいの最大の利益がある得ることができます。
ビッグサーフと知的同じ前の質問の意味が、多くの高効率要件
貪欲原則:小さなトップスタックを維持することが可能となるよう、(もちろん、最小値よりも大きい)最小を取るために最初の交換のための場所に置かれていない場合、バンドが戻って貪欲に行くことができます
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 // BXDによる入力 の#define担当者(iは、b)のための(; iは=(b)の<I ++はiは(A)= INT) の#defineためreppを(I、B)(I =(A int型); I> =(B); - I) の#define RI(N)のscanf( "%d個"、&(N)) の#define RII(N、M)のscanf( "%D%dの"、およびN、 &M) の#define RIII(N、M、K)のscanf( "%D%D%D"、&N、&M&K) の#define RS(S)のscanf( "%sの"、S); #defineは長い長いっ の#define PB一back の#define INF 0x3f3f3f3f の#define CLR(A、V)のmemset(A、V、 1E8; 構造体ノード { int型V、T。 ブール 演算子 <(constのノード&B)のconst { 戻り V> BV。 } } S [N]。 int型のn; ANS LL; BOOL CMP(ノードA、ノードB) { リターンで< BT。 } PRIORITY_QUEUE <ノード> Q。 INT メイン() { RI(N) 担当者(I、1 、N) RII(S [i]が.T、S [i]は.V)。 ソート(S + 1、S + 1 + N、CMP)。 担当者(I、1 、N) { もし、(S [i]が.T> q.size()) { ANS + = S [I] .V; q.push(S [I])。 } そう であれば(S [I] .V> q.top()V。) { ANS + = S [i]は.v- q.top()V。 q.pop(); q.push(S [I])。 } } COUT << ANS。 リターン 0 ; }