時間限制: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面臨的問...