魔法物品 動態規劃

2021-08-02 02:20:01 字數 1722 閱讀 2556

洛谷p1899

有兩種型別的物品:普通物品和魔法物品。普通物品沒有魔法屬性,而魔法物品擁有一些魔法屬性。每種普通物品有乙個價值 p ,但每種魔法物品有兩種價值:鑑定前的價值 p1 ,和鑑定後的價值 p2 (當然,p2 總是大於 p1);

為了鑑定乙個魔法物品,你需要購買乙個鑑定卷軸,用它來鑑定魔法物品。鑑定乙個魔法物品以後,鑑定卷軸便會消失。每個鑑定將會消耗 pi 元錢,如果沒有足夠的錢你將無法購買任何的鑑定卷軸。

現在,你正在乙個集市中,同時擁有很多件物品,你知道每件物品的價值並且想要**全部物品。那麼,你最多能夠獲得多少錢呢?

你可以假定:

1 開始的時候你沒有錢

2 所有的魔法物品都還沒有被鑑定

3 只要你有足夠的錢,你可以購買任意多的卷軸。

輸入

第一行有兩個整數 n 和 pi (0 < pi <= 5000)表示你擁有物品書和乙個鑑定卷軸的**

接下來的 n 行,每行給出一件物品的**

對於每件普通物品。那一行僅有乙個整數 p (0 < p <= 10000).

對於每件魔法物品,那一行將會有兩個整數 p1 和 p2 (0 < p1 < p2 <= 10000)。

輸出

乙個整數表示你最多能夠獲得多少錢

樣例輸入

2 10

10 20 100

樣例輸出

100資料規模

對於 30 % 的資料 n <= 50;

對於 100% 的資料 n <= 1000;

如果 v < p:

注意 : 資料中會出現售出所有的魔法物品仍然不能購買乙個魔法卷軸的情況注意 : 所有資料均不會出現初始資金 v 能夠購買魔法卷軸的情況

#include

#include

#include

#include

#include

using

namespace

std;

int f[10000005];

int n,p;

int th_len; // 魔法物品的個數

struct thing th[1005];

int main()else

v += a;

}callv = allv; //由於接下來會對 allv 進行操作,所以用 callv 儲存所有物品的**和,以便出現賣出所有魔法物品後仍無法購買卷軸時直接輸出

for(int i = 0;i <= th_len;i++)

}if(p > v)}}

int mi = 999999999;

for(int i = p - v;i <= allv;i++)

if(f[i] < mi)

mi = f[i];

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

allv += th[i].t;

if(allv - mi <= 0)

cout

<< callv;

else

cout

<< allv - mi;

}else

return

0;}

t073 t015 魔法物品

time limit 1 second memory limit 128 mb 有兩種型別的物品 普通物品和魔法物品。每種普通物品有乙個價值p,但每種魔法物品有兩種價值 鑑定前的價值p1和鑑定後的 價值p2 保證p2 p1 為了鑑定乙個魔法物品,你需要購買乙個鑑定卷軸。鑑定完一件魔法物品以後,鑑定卷...

魔法少女(動態規劃)

討論區 魔法少女 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述前些時間虛淵玄的鉅獻小圓著實火了一把。在黑長直 小炎 往上爬樓去對抗魔女之夜時,她遇到了乙個問題想請你幫忙。因為魔女之夜是懸浮在半空的,所以她必須要爬樓,而那座廢墟一共有n層,而且每層高度不同,這造成小炎爬每層的...

動態規劃 魔法石礦

動態規劃 魔法石礦 時間限制 1 sec 記憶體限制 64 mb 提交 116 解決 27 提交 狀態 命題人 admin 題目描述 為了找到回家的路,張琪曼施展魔法,從高維空間召喚出了一種叫作 讀者 的生物,據說 讀者 這種生物無所不能,他們可以穿越時空的限制,聆聽到歷史的聲音 巨人的吶喊。但這次...