0 1 揹包實際應用

2021-10-09 06:42:40 字數 1994 閱讀 1114

from dj

有許多程式設計師都熱愛玩遊戲,而小j自稱為遊戲王,曾玩過幾百種遊戲,幾乎所有能玩到的遊戲大作都玩遍了。隨著時間的推移,他發覺已經沒有遊戲可以讓他玩了!於是他想改玩一些古老的遊戲,以成為真正的「遊戲王」。他希望在接下來的一段時間內將過去出的遊戲全部玩一遍,但是畢竟時間有限,因此他感到很苦惱。

於是他想到乙個計畫,他先將每個遊戲標上乙個成就值,同時對每個遊戲都估算乙個通關所需要的天數,他計畫在未來x天內讓自己玩遊戲的成就達到最大,那麼他應該怎麼做計畫呢?(假設每個遊戲最多隻計畫玩一遍,而且每個遊戲必須玩完通關才能取得成就值,且通關每個遊戲最小時間單位是1天)

輸入描述

第一行輸入兩個整數n和x,中間用空格隔開,其中n表示遊戲的數目n(1<=n<=10),x表示計畫玩遊戲的總時間天數 (1<=x<=1000)。

第二行輸入第1個遊戲的成就值a1(0<=a1<=10000) 和 通關所需要花費時間b1天 (1<=bi<=500) 中間用空格隔開。

第n+1行輸入第n遊戲的成就值an(0<=an<=10000) 和 通關所需要花費時間bn天(1<=bn<=500) 中間用空格隔開

輸出描述

可以達到成就之和的最大值。

示例 1

樣例輸入

2 2

10 1

20 2

樣例輸出

20
示例 2

輸入樣例二:

3 4

10 2

18 3

10 2

輸出樣例二:

20
題目一看就是 0-1 揹包問題

遊戲數量 --> 物品數量

計畫天數 --> 揹包重量

遊戲成就值 --> 物品價值

遊戲耗費天數 --> 物品重量

**

/**

* @classname playgamedemo

* @description todo

* @author heygo

* @date 2020/8/16 19:37

* @version 1.0

*/public

class

playgamedemo

int maxachievement =

knapsack

(plandays, gamecounts, costday, achievement)

; system.out.

println

(maxachievement);}

/** * 0-1 揹包問題

** @param w 揹包的重量

* @param n 現有物品的數量

* @param wt 物品的重量

* @param val 物品的價值

* @return 揹包中物品的最大價值

*/public

static

intknapsack

(int w,

int n,

int[

] wt,

int[

] val)

else}}

for(

int[

] ints : dp)

return dp[n]

[w];

}}

程式執行結果

2 2

10 1

20 2

20

0 1揹包和完全揹包問題應用

name 0 1揹包和完全揹包問題應用 author date 26 07 17 22 45 description 0 1揹包問題應用 數字組合問題 有m個正整數1 m,找出其中和為n的可能的組合方式。如 m 5,則5個數分別為1,2,3,4,5,n 5 那麼可能的組合有5 1 4和5 2 3和5...

揹包 01揹包

01揹包 有n種物品與承重為m的揹包。每種物品只有一件,每個物品都有對應的重量weight i 與價值value i 求解如何裝包使得價值最大。dp i,v 表示前i個物體 包括第i個 面對容量為v的揹包的最大價值,c i 代表物體i的重量,w i 代表物體i的價值 如果第i個物體不放入揹包,則揹包...

揹包專題 01揹包

暑假集訓開始了,按照隊裡的分配,我是弄dp的,嘛,於是我又一次的開始了從01揹包開始學習,昨天將杭電的幾道01揹包重新做了一遍,下面講講我自己對於01揹包的理解。首先01揹包題目的雛形是 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。...