hdu 1248 寒冰王座(全然揹包:入門題)
題意
:
不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票(記住,僅僅有一張鈔票),為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.
死亡騎士:"我要買道具!"
地精商人:"我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙個."
死亡騎士:"好的,給我乙個血瓶."
說完他掏出那張n元的大鈔遞給地精商人.
地精商人:"我忘了提醒你了,我們這裡沒有找客人錢的習慣的,多的錢我們都當小費收了的,嘿嘿."
死亡騎士:"......"
死亡騎士想,與其把錢當小費送個他還不如自己多買一點道具,反正以後都要買的,早點買了放在家裡也好,可是要盡量少讓他賺小費.
如今死亡騎士希望你能幫他計算一下,最少他要給地精商人多少小費.
分析
:
僅僅有3種商品, 且無限**, 明顯的全然揹包問題.
本題限制條件: 總費用<=n
本題目標條件: 總費用盡量大.
令dp[i][j]==x 表示僅僅購買前i種商品時, 總花費<=j元時, 最多能花x元錢.
初始化: dp全為0.
狀態轉移: dp[i][j] = max( dp[i-1][j] , dp[i][j-val[i]]+val[i])
前者表示第i種商品乙個都不買, 後者表示至少買1個第i種商品.
終於所求: dp[n][n]. n為商品數,本題n==3. n為初始金錢數目. 可是我們要輸出 n-dp[n][n].
程式實現用的滾動陣列, 所以dp僅僅有[j]一維.
ac**:
#include#include#includeusing namespace std;
const int maxn=10000+5;
int n=3;
int val=;//每種商品**
int dp[maxn];
int main()
{ //初始化
memset(dp,0,sizeof(dp));
//遞推
for(int i=0;i
HDU 1248 寒冰王座 (揹包)
problem description 不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死亡騎士 我要買道具 地精商人 我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙...
HDU1248 寒冰王座 完全揹包
problem description 不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死亡騎士 我要買道具 地精商人 我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙...
完全揹包 HDU 1248 寒冰王座
有n中物品和乙個容量為v的揹包,每種物品都有無限件可用,放入第i中物品所佔的空間是ci,價值是wi,求解將哪些物品放入揹包中可使這些物品的耗費空間總和不超過揹包的容量,且價值總和最大。for i 1 i n i for v ci v v v f v max f v f v ci wi 在01揹包中讓...