洛谷 P1230 智力大衝浪 貪心

2021-08-28 05:01:59 字數 1334 閱讀 9038

智力大衝浪

原題:小偉報名參加**電視台的智力大衝浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者m元。先不要太高興!因為這些錢還不一定都是你的?!接下來主持人宣布了比賽規則:

首先,比賽時間分為n個時段(n≤500),它又給出了很多小遊戲,每個小遊戲都必須在規定期限ti前完成(1≤ti≤n)。如果乙個遊戲沒能在規定期限前完成,則要從獎勵費m元中扣去一部分錢wi,wi為自然數,不同的遊戲扣去的錢是不一樣的。當然,每個遊戲本身都很簡單,保證每個參賽者都能在乙個時段內完成,而且都必須從整時段開始。主持人只是想考考每個參賽者如何安排組織自己做遊戲的順序。作為參賽者,小偉很想贏得冠軍,當然更想贏取最多的錢!注意:比賽絕對不會讓參賽者賠錢!

輸入輸出格式

輸入格式:

輸入檔案riddle.in,共4行。

第1行為m,表示一開始獎勵給每位參賽者的錢;

第2行為n,表示有n個小遊戲;

第3行有n個數,分別表示遊戲1到n的規定完成期限;

第4行有n個數,分別表示遊戲1到n不能在規定期限前完成的扣款數。

輸出格式:

輸出檔案riddle.out,僅1行。表示小偉能贏取最多的錢。

輸入輸出樣例

輸入樣例#1:

10000

74 2 4 3 1 4 6

70 60 50 40 30 20 10

輸出樣例#1:

9950

題解:題意簡單地說就是給你m元錢讓你做n個任務,每乙個任務要花一整天做,而且每個任務都有自己的截止日期,若是在截止日期之前沒做完會扣掉相應的錢。

這是一道入門級別的貪心題目,只有兩個元素截止日期和扣掉的錢,目的是為了得到更多的錢,就需要扣最少的錢,所以要將扣錢當作首要元素考慮,再去考慮截止日期。按扣錢數由大到小,截止日期由大到小排序。為什麼這麼排序呢?因為錢數越大越重要,截止日期越靠後那完成他的時間就越長。定義乙個vis陣列來儲存是否用過那天,每乙個物品都從截止日期往前搜尋直到有一天沒有用過。(越晚做越好,因為我不僅能做,還不占用前面的時間)若是沒有符合條件的則扣錢。

附上ac**:

#include #include #include using namespace std;

int n,m,sum;

bool vis[505];

struct node

t[505];

bool compare(node a,node b)

int main()

for(int i=0;i>t[i].w;

}sort(t,t+n,compare);

for(int i=0;i0;j--)

}if(j==0)}}

cout 《若有錯誤,歡迎指正!

洛谷P1230智力大衝浪

小偉報名參加 電視台的智力大衝浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者m元。先不要太高興!因為這些錢還不一定都是你的?接下來主持人宣布了比賽規則 首先,比賽時間分為n個時段 n 500 它又給出了很多小遊戲,每個小遊戲都必須在規定期限ti前完成 1 ti n 如...

洛谷 P1230 智力大衝浪

洛谷 p1230 智力大衝浪 小偉報名參加 電視台的智力大衝浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者m元。先不要太高興!因為這些錢還不一定都是你的?接下來主持人宣布了比賽規則 首先,比賽時間分為n個時段 n 500 它又給出了很多小遊戲,每個小遊戲都必須在規定期...

洛谷 P1230 智力大衝浪

小偉報名參加 電視台的智力大衝浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者m元。先不要太高興!因為這些錢還不一定都是你的?接下來主持人宣布了比賽規則 首先,比賽時間分為n個時段 n 500 它又給出了很多小遊戲,每個小遊戲都必須在規定期限ti前完成 1 ti n 如...