洛谷習題 瘋狂的採藥

2022-07-16 20:09:15 字數 535 閱讀 6138

嗯,改編自那道經典的01揹包問題——採藥。

與之間的採藥不同,這裡每種草藥有無限多個,通常把這類問題稱為完全揹包問題。

每種草藥並不唯一,會有若干個被放入揹包,雖然看起來比01揹包複雜很多,但實際上,他很容易轉化為01揹包問題。具體方法此處不再贅述,直接放一種簡單有效的做法。在01揹包**中,優化空間複雜度後,我們是從t列舉到t[i],之所以要這樣做,是為了保證,dp[j]裡存放的是考慮i-1株草藥時的最大價值。假如我們從t[i]列舉到t,會怎樣呢?就會導致,dp[j]裡存放的是考慮過無數株的第i株草藥後的最大價值,剛好符合完全揹包的要求。

1 #include 2

3const

int maxt = 1e5 + 5, maxm = 1e4 + 5;4

5int

t[maxm], v[maxm], dp[maxt];67

intmain()

16 printf("%d"

, dp[t]);

17return0;

18 }

ac**

洛谷 P1616 瘋狂的採藥

題目概述 給定時間t,草藥數n,採每組草藥所需的時間a i 和該組草藥的價值b i 求在給定的時間內能採到的草藥的最大價值。每種草藥可以無限採。n 10000,且n t 10 7 解題思路 我們知道,對於這類揹包問題,時間複雜度為 n t 在題目所給的範圍內不會超時,方法與01揹包一致,不過掃瞄的順...

洛谷P1616 瘋狂的採藥

完全揹包,可以用乙個常數優化,對於同乙個價值的量,僅儲存花費最小的那個就行了,因為每種都有無限多個。includeusing namespace std int n,v int c 10005 w 10005 int d 100005 int mincost 10005 pos void compl...

洛谷p1616瘋狂的採藥

這是個樸實無華的名字,所以下面是一篇樸實無華的文章,請大牛們輕噴 洛谷上這道題確實很瘋狂。其實這是一道完全揹包的板子題,但有兩點需要注意 所以,獻上第一次全wa includeusing namespace std int f 105 105 w 105 c 105 直接用的板子,陣列開的不夠大re...