寵物小精靈是一部講述小智和他的搭檔皮卡丘一起冒險的故事。
一天,小智和皮卡丘來到了小精靈狩獵場,裡面有很多珍貴的野生寵物小精靈。小智也想收服其中的一些小精靈。然而,野生的小精靈並不那麼容易被收服。對於每乙個野生小精靈而言,小智可能需要使用很多個精靈球才能收服它,而在收服過程中,野生小精靈也會對皮卡丘造成一定的傷害(從而減少皮卡丘的體力)。當皮卡丘的體力小於等於0時,小智就必須結束狩獵(因為他需要給皮卡丘療傷),而使得皮卡丘體力小於等於0的野生小精靈也不會被小智收服。當小智的精靈球用完時,狩獵也宣告結束。
我們假設小智遇到野生小精靈時有兩個選擇:收服它,或者離開它。如果小智選擇了收服,那麼一定會扔出能夠收服該小精靈的精靈球,而皮卡丘也一定會受到相應的傷害;如果選擇離開它,那麼小智不會損失精靈球,皮卡丘也不會損失體力。
小智的目標有兩個:主要目標是收服盡可能多的野生小精靈;如果可以收服的小精靈數量一樣,小智希望皮卡丘受到的傷害越小(剩餘體力越大),因為他們還要繼續冒險。
現在已知小智的精靈球數量和皮卡丘的初始體力,已知每乙個小精靈需要的用於收服的精靈球數目和它在被收服過程中會對皮卡丘造成的傷害數目。請問,小智該如何選擇收服哪些小精靈以達到他的目標呢?
輸入資料的第一行包含三個整數:n(0之後的k行,每一行代表乙個野生小精靈,包括兩個整數:收服該小精靈需要的精靈球的數量,以及收服過程中對皮卡丘造成的傷害。
輸出為一行,包含兩個整數:c,r,分別表示最多收服c個小精靈,以及收服c個小精靈時皮卡丘的剩餘體力值最多為r。
10 100 5
7 10
2 40
2 50
1 20
4 20
3 30
樣例輸入2:
10 100 5
8 110
12 10
20 10
5 200
1 110
樣例輸出2:
0 100
對於樣例輸入1:小智選擇:(7,10) (2,40) (1,20) 這樣小智一共收服了3個小精靈,皮卡丘受到了70點傷害,剩餘100-70=30點體力。所以輸出3 30。
對於樣例輸入2:小智乙個小精靈都沒法收服,皮卡丘也不會收到任何傷害,所以輸出0 100。
// created on 2020/2/19
/*#include #include #include #include #include */
#include using namespace std;
typedef long long ll;
const int idata=1000+5;
const int inf=0x3f3f3f3f;
//int n,m,t;
int minn=int_max,maxx=int_min;
ll sumfee[idata];
int cnt[idata][idata];
int expend[idata],injure[idata];
int i,v,j,k;
int ball,strong,wild;
inline void initial()
int main()}}
int flag;
for(i=0;i<=strong;i++)//尋找使max:cnt[j][k]成立的點
}cout
}
寵物小精靈之收服
poj 4978 有兩個限制,小智的精靈球和皮卡丘的體力值,所以建乙個二維陣列來列舉各個精靈球和體力值。每一次判斷一下是不是比全域性最大值大。然後更新一 力值。剛開始沒有搞清楚應該正著迴圈還是倒著迴圈,總是寫不對。其實先仔細想想還是挺好寫的。include include include inclu...
寵物小精靈之收服
寵物小精靈是一部講述小智和他的搭檔皮卡丘一起冒險的故事。一天,小智和皮卡丘來到了小精靈狩獵場,裡面有很多珍貴的野生寵物小精靈。小智也想收服其中的一些小精靈。然而,野生的小精靈並不那麼容易被收服。對於每乙個野生小精靈而言,小智可能需要使用很多個精靈球才能收服它,而在收服過程中,野生小精靈也會對皮卡丘造...
寵物小精靈之收服(dp
寵物小精靈是一部講述小智和他的搭檔皮卡丘一起冒險的故事。一天,小智和皮卡丘來到了小精靈狩獵場,裡面有很多珍貴的野生寵物小精靈。小智也想收服其中的一些小精靈。然而,野生的小精靈並不那麼容易被收服。對於每乙個野生小精靈而言,小智可能需要使用很多個精靈球才能收服它,而在收服過程中,野生小精靈也會對皮卡丘造...