題目描述:
小偉報名參加**電視台的智力大衝浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者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個...