UPC 6198 JL的智力大衝浪 簡單貪心

2021-08-17 18:03:57 字數 1688 閱讀 6025

題目描述

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

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

輸入 共4行。

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

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

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

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

輸出 僅1行。表示jl能贏取最多的錢。

樣例輸入

10000

7 4 2 4 3 1 4 6

70 60 50 40 30 20 10

樣例輸出

9950

一道貪心水題,一開始被自己的**卡了好久,基本思路就是貪心,後來在網上看別人的部落格時發現他們竟然對價值排序,很不理解,總之我是按時間排序,先做能做的。時間一樣按價值排序,先做扣錢多的。然後重點來了,乙個簡單的500範圍,直接n方暴力就好,我們對乙個新遍歷到的遊戲,發現如果無法完成,那麼我們就遍歷之前完成過的所有遊戲,找乙個花費最少的,然後與新遊戲比較,取花費最小的捨去,給了選擇乙個反悔的機會。這樣每次取最優解,一旦發現有任務完成不了,就找乙個做過的遊戲來比較,替換。這樣保證我們每次捨去的都是乙個最小花費。並且捨去的遊戲不再作為參考項,因為按時間排序,所有待選項必須都在當時的時間下可以被完成,要麼我用之前完成過其他遊戲的時間完成後來的任務,要麼我不要後來的任務,就按順序做好之前能做的任務,這是按時間排序過的,捨去的,就已經過了時間,失去了反悔的機會。

需要注意的是,我們遍歷的是已經做過的遊戲,那麼對於沒有做過的遊戲我們不做遍歷,因此要對做過的遊戲做乙個標記,並且在後來的取捨中。被取到的遊戲要標記,被捨去的遊戲要取消標記。以便後來的遍歷中,仍然可以拿此次的選擇作為捨去的待選項。

#include

#include

#include

#include

#define ll long long

using

namespace

std;

struct node

a[506];

bool vis[506];

bool cmp(node a,node b)

else

else m-=a[i].w;

}i++;

// printf("%d*****%d\n",a[i].t,m);

}printf("%d\n",m<0?0:m);

}}/*

1000

91 1 1 3 4 5 2 2 2

30 60 90 100 100 100 30 60 90

3000

81 2 2 3 4 4 4 4

10 10 10 10 100 100 100 100

*/

UPC 多項式的輸出

題目描述 一元 n 次多項式可用如下的表示式表示 其中,aixi稱為 i 次項,ai 稱為 i 次項的係數。給出乙個一元多項式各項的次數和係數,請按照如下規定的格式要求輸出該多項式 f x anxn an 1xn 1 a1x a0,an 0 多項式中自變數為 x,從左到右按照次數遞減順序給出多項式。...

UPC6358 庭師的利刃

時間限制 1 sec 記憶體限制 128 mb 提交 651 解決 117 提交 狀態 討論版 命題人 admin 題目描述 作為白玉樓的庭師,妖夢雖然不會n刀流,但是卻領悟了生命二刀流。然而我也是個劍的收藏者,家裡屯著n把劍,每一把劍都有乙個靈魂值a i 由於一些劍之間可能有共鳴,所以我需要兩把契...

upc 6358庭師的利刃

時間限制 1 sec 記憶體限制 128 mb 提交 729 解決 145 提交 狀態 討論版 命題人 admin 題目描述 作為白玉樓的庭師,妖夢雖然不會n刀流,但是卻領悟了生命二刀流。然而我也是個劍的收藏者,家裡屯著n把劍,每一把劍都有乙個靈魂值a i 由於一些劍之間可能有共鳴,所以我需要兩把契...