寵物小精靈之收服(dp

2022-07-29 08:15:08 字數 1471 閱讀 1027

寵物小精靈是一部講述小智和他的搭檔皮卡丘一起冒險的故事。

一天,小智和皮卡丘來到了小精靈狩獵場,裡面有很多珍貴的野生寵物小精靈。

小智也想收服其中的一些小精靈。

然而,野生的小精靈並不那麼容易被收服。

對於每乙個野生小精靈而言,小智可能需要使用很多個精靈球才能收服它,而在收服過程中,野生小精靈也會對皮卡丘造成一定的傷害(從而減少皮卡丘的體力)。

當皮卡丘的體力小於等於0時,小智就必須結束狩獵(因為他需要給皮卡丘療傷),而使得皮卡丘體力小於等於0的野生小精靈也不會被小智收服。

當小智的精靈球用完時,狩獵也宣告結束。

我們假設小智遇到野生小精靈時有兩個選擇:收服它,或者離開它。

如果小智選擇了收服,那麼一定會扔出能夠收服該小精靈的精靈球,而皮卡丘也一定會受到相應的傷害;如果選擇離開它,那麼小智不會損失精靈球,皮卡丘也不會損失體力。

小智的目標有兩個:主要目標是收服盡可能多的野生小精靈;如果可以收服的小精靈數量一樣,小智希望皮卡丘受到的傷害越小(剩餘體力越大),因為他們還要繼續冒險。

現在已知小智的精靈球數量和皮卡丘的初始體力,已知每乙個小精靈需要的用於收服的精靈球數目和它在被收服過程中會對皮卡丘造成的傷害數目。

請問,小智該如何選擇收服哪些小精靈以達到他的目標呢?

輸入格式

輸入資料的第一行包含三個整數:n,m,k,分別代表小智的精靈球數量、皮卡丘初始的體力值、野生小精靈的數量。

之後的k行,每一行代表乙個野生小精靈,包括兩個整數:收服該小精靈需要的精靈球的數量,以及收服過程中對皮卡丘造成的傷害。

輸出格式

輸出為一行,包含兩個整數:c,r,分別表示最多收服c個小精靈,以及收服c個小精靈時皮卡丘的剩餘體力值最多為r。

資料範圍

0思路:題目很長 , 主要就是 要我們找到 當我們精靈球和體力同時滿足的情況下 能捕捉的寵物的最大值 , 並且如果捕捉數目一致 那麼剩餘體力最多是多少 ;

dp[n][n] 表示的就是 精靈球滿足 體力滿足的情況下 能捕捉的最大個數精靈球 ; 最後只需要比較最大值相同 消耗的體力值最小(dp求的是消耗這麼多體力能捕捉寵物的最大值) 最後用我們的體力減去最小的消耗那麼 就是最大剩餘體力

(臨界條件 皮卡丘的體力必須大於0) 所以體力最後是不可能為0;

#include #include #include using namespace std;

const int n = 1010;

int n , m , k;

int dp[n][n];//精靈球滿足條件 體力滿足條件的情況下 能收服的最大精靈球有多少

int main()}}

cout << dp[n][m] << ' ';

int res = 0x3f3f3f3f ;

for(int i = 1; i <= m ; i++)

cout << m- res + 1 << endl;//前面是從1開始的

return 0;

}

寵物小精靈之收服

poj 4978 有兩個限制,小智的精靈球和皮卡丘的體力值,所以建乙個二維陣列來列舉各個精靈球和體力值。每一次判斷一下是不是比全域性最大值大。然後更新一 力值。剛開始沒有搞清楚應該正著迴圈還是倒著迴圈,總是寫不對。其實先仔細想想還是挺好寫的。include include include inclu...

寵物小精靈之收服

寵物小精靈是一部講述小智和他的搭檔皮卡丘一起冒險的故事。一天,小智和皮卡丘來到了小精靈狩獵場,裡面有很多珍貴的野生寵物小精靈。小智也想收服其中的一些小精靈。然而,野生的小精靈並不那麼容易被收服。對於每乙個野生小精靈而言,小智可能需要使用很多個精靈球才能收服它,而在收服過程中,野生小精靈也會對皮卡丘造...

1292 寵物小精靈之收服

寵物小精靈是一部講述小智和他的搭檔皮卡丘一起冒險的故事。一天,小智和皮卡丘來到了小精靈狩獵場,裡面有很多珍貴的野生寵物小精靈。小智也想收服其中的一些小精靈。然而,野生的小精靈並不那麼容易被收服。對於每乙個野生小精靈而言,小智可能需要使用很多個精靈球才能收服它,而在收服過程中,野生小精靈也會對皮卡丘造...