知性P1230サーフィン
タイトル説明
CCTV Xiaoweiは知性サーフィンプログラムを登録します。チャレンジは、各選手報いるため、すべての人の勇気の認識で司会多くの参加者を集め\(m個\)元。あまりにも幸せにしないでください!これらは必ずしもお金を払っていないので、あなたは何ですか?!その後、ホストは、ゲームのルールを発表しました:
まず、ゲーム時間が分かれている\(N \)ピリオド\((n≤500)\) 、それはゲームの多くを与え、それぞれのゲームは、所定の期間内になければなりません\(TI \)完了前に(\ (1≤ti≤n)\) 。ゲームは所定の期間前に完了することができない場合は、からのインセンティブ報酬\(m個\)元はお金の一部控除\(のWi \)、\ (のWi \)の自然数、異なるゲームはお金が控除されていないですが同じ。もちろん、すべてのゲーム自体は、各参加者が一定の期間内に完了することができますが、全期間から開始しなければならないことを保証するために、非常に簡単です。司会はどれだけゲームを行うには、自分の組織の順序を調整するために、各参加者をクイズにしたいです。参加者として、Xiaoweiは、もちろん、ほとんどのお金を勝ちたい勝ちたいと思いました!注意:ゲームは、参加者がお金を失うことはできません!
入力形式
ファイルriddle.in、4行の合計を入力します。
最初の行動\(m個\)は、各参加者のお金へのご褒美の始まりを表し、
第二行動\(N \) 、表現\(N \)小さなゲーム。
行3は、有している\(N \) 1ゲームへ、それぞれ、番号を\(N- \)を所定の期間が終了します。
4行目は持っている\(N- \) 1試合を、それぞれ、番号を\(N- \)を控除は、期限までに完了することができません。
出力フォーマット
出力ファイルriddle.out、一行のみ。彼はXiaoweiは、最もお金を獲得することができました表します。
サンプル入力と出力
入力#1
10000
7
4 2 4 3 1 4 6
70 60 50 40 30 20 10
出力#1
9950
[思考]
ソート貪欲+
この貪欲非常に興味深いテーマである
前に行わクリアランスのゲームはレビューサイトを通じてに多少似ていること
私は貪欲な思考についてお話しましょう
貪欲、最終的に最善の解決策となるようもちろん、最高の地元のソリューションです
この質問のは、局所解の目的は、時間の単位ごとに最適なソリューションです
何が最善か?あなたが最もお金がそのゲームを差し引きます完了しない場合に完了することができ
、単位時間内ので、再び少ないお金が最低の条件の下で可能になりますが、
より多くのお金を残します
しかし、そこに難しさがあること少し質問です
私は時間点Aのタスクを持っている場合、私は時間の点aでできるということである- 1ダオ1.完了を
どの列挙正シーケンスの実行不可能性につながるが、私たちはしなければなりません列挙する
場所、ああ、見過ごすことは非常に簡単です
、あなたは、STLの魔法を使用することができます!
時点のバックの前にあるタスクはすべて行うことができますので
、プライオリティキューでそう、
現時点のそれぞれは、内部の優先度キューにタスクを完了し
た後、各時点をし、それらにお金マイナスの内側を与えました完了まで
以上にお金を引くことになります
残りのお金はちょうどそれを減算する必要があるの内側に、最後のプライオリティキューを減算する必要があります
[完了コード】
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue<int>s;
struct node
{
int t,v;
}a[505];
bool cmp(const node x,const node y)
{
return x.t > y.t;
}
int main()
{
int n,m;
scanf("%d%d",&m,&n);
for(int i = 1;i <= n;++ i)
scanf("%d",&a[i].t);
for(int i = 1;i <= n;++ i)
scanf("%d",&a[i].v);
sort(a + 1,a + 1 + n,cmp);
int js = 1;
for(int i = n;i >= 1;i --)
{
while(a[js].t >= i)
{
s.push(a[js].v);
js ++;
}
if(!s.empty())
s.pop();
}
while(!s.empty())
{
m -= s.top();
s.pop();
}
cout << m << endl;
return 0;
}