hihocoder 1043 完全揹包

2022-07-12 10:27:10 字數 2571 閱讀 7878

時間限制:20000ms

單點時限:1000ms

記憶體限制:256mb

描述且說之前的故事裡,小hi和小ho費勁心思終於拿到了茫茫多的獎券!而現在,終於到了小ho領取獎勵的時刻了!

等等,這段故事為何似曾相識?這就要從平行宇宙理論說起了………總而言之,在另乙個宇宙中,小ho面臨的問題發生了細微的變化!

小ho現在手上有m張獎券,而獎品區有n種獎品,分別標號為1到n,其中第i種獎品需要need(i)張獎券進行兌換,並且可以兌換無數次,為了使得辛苦得到的獎券不白白浪費,小ho給每件獎品都評了分,其中第i件獎品的評分值為value(i),表示他對這件獎品的喜好值。現在他想知道,憑藉他手上的這些獎券,可以換到哪些獎品,使得這些獎品的喜好值之和能夠最大。

提示一: 切,不就是0~1變成了0~k麼

提示二:強迫症患者總是會將狀態轉移方程優化一遍又一遍

提示三:同樣不要忘了優化空間哦!

提示一: 切,不就是0~1變成了0~k麼

令人欣慰的是,在這個平行世界裡小ho已經學習了一般的01揹包問題,所以他並沒有思考太久,便提出了自己的想法。

「我們的首要目標仍然是將問題抽象化!在我看來,這個問題其實和01揹包問題很像,我們在解決01揹包問題的時候是按照獎品的標號從1到n依次決定每件獎品是否選取,那麼對於每種獎品有無數件的這個問題,我可以按照獎品的標號從1到n依次決定每種獎品選取的件數!」

小hi點了點頭表示贊同。

小ho於是繼續說道:「那麼按照01揹包的想法,我可以使用best(i, x)表示已經決定了前i件物品每件物品選擇多少件,當前已經選取的物品的所需獎券數總和不超過x時,能夠獲取的最高的喜好值的和,那麼最終的答案便是best(n, m)。」

小hi道:」的確可以這樣,那麼你準備如何轉移呢?」

小ho道:「仍然是根據01揹包的做法,對於乙個問題best(i, x),考慮最後一步——即第i件物品選擇多少件,不妨就假設選擇k件吧,那麼k的取值範圍肯定是在0~(x / need(i))這個範圍內。這個時候我們可以知道best(i - 1, x - need(i) * k) + value(i) * k將會是一種可能的方案。」

小hi撓了撓頭,問道:」你所說的『可能的方案』是什麼意思?」

小ho笑道:「就是說best(i, x)的求解滿足這個公式~」

說罷,拿過紙筆,列出了乙個式子。

小hi接過紙來,看完說道:「的確沒錯,總共就是這些可能~那你是否求解這個問題也是用與01揹包類似的方法進行求解呢?」

「是的,我會使用這樣的方法來做!」小ho刷刷刷又在紙上寫下來幾行偽**。

「應該沒有問題,時間複雜度也很不錯了~~但是我看著總有點難受!」小hi點了點頭又搖頭。

「怎麼說?」

提示二:強迫症患者總是會將狀態轉移方程優化一遍又一遍

小hi嘻嘻笑了兩聲,說道:「我們不妨換一種問題定義的方式:用best(i, x)表示已經決定了前i件物品每件物品選擇多少件,當前已經選取的物品的所需獎券數總和不超過x時,能夠獲取的最高的喜好值的和!」

小ho仔仔細細回憶了下,確認小hi所說和自己先前並無區別,怒道:「你這和我的定義方法有什麼區別呀?」

小hi道:「別急別急,這部分的確沒有區別,有區別的在後頭~」

小ho撇了撇嘴:「那你就說唄~」

小hi繼續道:「我們還是考慮最後一步——要不要再選一件第i種獎品!」

小ho有點不能理解,道:「什麼叫再選一件?」

「你想想,在你的狀態轉移方程(即問題求解公式)中是否滿足這樣兩個公式?」小hi問道。

小ho低頭想了想,點了點頭表示贊同。

小hi於是繼續問道:「那你有沒有意識到這樣乙個等式?」

「似乎……是的!」小ho驚道:「這麼說,其實best(i, x)的大部分計算都在best(i, x - need(i))中已經計算過了!」

小hi問出了最後乙個問題:「所以你的公式是不是就可以變成這樣子呢?」

「是的!所以……**就可以這麼寫了~是麼!」

「是的嗯~」      

提示三:同樣不要忘了優化空間哦!

詳情請見hiho一下 第6周 01揹包 提示二~

輸入每個測試點(輸入檔案)有且僅有一組測試資料。

每組測試資料的第一行為兩個正整數n和m,表示獎品的種數,以及小ho手中的獎券數。

接下來的n行描述每一行描述一種獎品,其中第i行為兩個整數need(i)和value(i),意義如前文所述。

測試資料保證

對於100%的資料,n的值不超過500,m的值不超過10^5

對於100%的資料,need(i)不超過2*10^5, value(i)不超過10^3

輸出對於每組測試資料,輸出乙個整數ans,表示小ho可以獲得的總喜好值。

樣例輸入

5 1000

144 990

487 436

210 673

567 58

1056 897

樣例輸出

5940

HihoCoder 1043 完全揹包

華電北風吹 天津大學認知計算與應用重點實驗室 2016 06 24 題目分析 01揹包的完全揹包問題,思路跟01揹包類似,只是更新的時候對所有的容量狀態全部更新。problem1043.cpp 定義控制台應用程式的入口點。1043 完全揹包 張正義 2016 04 12 include stdafx...

hihocoder1043 完全揹包

具體問題請參考 hihocoder官網。回顧 hihocoder1038 01揹包問題,01揹包是按照物體逐一列舉,是因為每個物體只能選擇1次。而完全揹包問題,是可以選擇無數次,這裡可以展開為k個物體,但是作者採用的按照金額列舉。具體來說,定義f i 為有i個金額所能獲得的最大價值,那麼有轉移方程f...

Hihocoder 1043 完全揹包

1043 完全揹包 時間限制 20000ms 單點時限 1000ms 記憶體限制 256mb 描述 且說之前的故事裡,小hi和小ho費勁心思終於拿到了茫茫多的獎券!而現在,終於到了小ho領取獎勵的時刻了!等等,這段故事為何似曾相識?這就要從平行宇宙理論說起了 總而言之,在另乙個宇宙中,小ho面臨的問...