智力大衝浪(貪心)

2022-03-14 11:23:18 字數 1314 閱讀 3750

題目描述:

小偉報名參加**電視台的智力大衝浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者m元。先不要太高興!因為這些錢還不一定都是你的。接下來主持人宣布了比賽規則: 首先,比賽時間分為n個時段(n≤500),它又給出了很多小遊戲,每個小遊戲都必須在規定期限ti前完成(1≤ti≤n)。如果乙個遊戲沒能在規定期限前完成,則要從獎勵費m元中扣去一部分錢wi,wi為自然數,不同的遊戲扣去的錢是不一樣的。當然,每個遊戲本身都很簡單,保證每個參賽者都能在乙個時段內完成,而且都必須從整時段開始。主持人只是想考考每個參賽者如何安排組織自己做遊戲的順序。作為參賽者,小偉很想贏得冠軍,當然更想贏取最多的錢! 注意:比賽絕對不會讓參賽者賠錢!

輸入描述:

輸入共4行。

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

第二行為n,表示有n個小遊戲; 第三行有n個數,分別表示遊戲1~n的規定完成期限;

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

輸出描述:

僅1行。表示小偉能贏取最多的錢。

樣例輸入:

10000

7 4 2 4 3 1 4 6

70 60 50 40 30 20 10

樣例輸出:

n≤500

1≤ti≤n

思路:

貪心 1、把這些任務按照扣款的數目進行排序,把大的排在前面,先進行放置。

2、如何放呢?是不是最大的就放在最前面呢?其實不然,假如罰款最多的乙個任務的完成期限是k,應該把它放在第k個時段,因為放在1~k任意乙個位置,效果都是一樣的,這樣可以為其他的放置讓出前面的時間段。

3、一旦出現乙個不可能在規定時限前完成的任務,則把其扔到最靠後的乙個空時間段,因為不能完成的任務,在任意乙個時間段中罰款數目都是一樣的,這樣可以為其他的放置讓出前面的時間段。

#include

#include

using

namespace

std;

const

int maxn=510;

struct node

}a[maxn];

int n,total,ans,hash[maxn];

bool flag;

int main()

if(!flag) ans+=a[i].money;}}

cout

0;}

智力大衝浪 貪心

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

貪心 智力大衝浪

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

智力大衝浪

時間限制 1 sec 記憶體限制 128 mb 提交 112 解決 71 提交 狀態 討論版 小偉報名參加 電視台的智力大衝浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者m元。先不要太高興!因為這些錢還不一定都是你的?接下來主持人宣布了比賽規則 首先,比賽時間分為n個...