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 求解將哪些物品裝入揹包可使價值總和最大。...