mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 00:01:37 +08:00
0 1 knapsack (#408)
* Added Longest Common Subsequence * Renamed the File * Optimized the code * Optimized the code * Changed some styles as per the rule * Again some style fixed * Added Longest Increasing Subsequence program to the list * Style changed * Added 0-1-Knapsack Problem * Style Changed as per guidelines * Update ZeroOneKnapsack.js * Delete LongestCommonSubsequence.js * Delete LongestIncreasingSubsequence.js Co-authored-by: vinayak <itssvinayak@gmail.com>
This commit is contained in:
71
Dynamic-Programming/ZeroOneKnapsack.js
Normal file
71
Dynamic-Programming/ZeroOneKnapsack.js
Normal file
@ -0,0 +1,71 @@
|
||||
/**
|
||||
* A Dynamic Programming based solution for calculating Zero One Knapsack
|
||||
* https://en.wikipedia.org/wiki/Knapsack_problem
|
||||
*/
|
||||
|
||||
const zeroOneKnapsack = (arr, n, cap, cache) => {
|
||||
if (cap === 0 || n === 0) {
|
||||
cache[n][cap] = 0
|
||||
return cache[n][cap]
|
||||
}
|
||||
if (cache[n][cap] !== -1) {
|
||||
return cache[n][cap]
|
||||
}
|
||||
if (arr[n - 1][0] <= cap) {
|
||||
cache[n][cap] = Math.max(arr[n - 1][1] + zeroOneKnapsack(arr, n - 1, cap - arr[n - 1][0], cache), zeroOneKnapsack(arr, n - 1, cap, cache))
|
||||
return cache[n][cap]
|
||||
} else {
|
||||
cache[n][cap] = zeroOneKnapsack(arr, n - 1, cap, cache)
|
||||
return cache[n][cap]
|
||||
}
|
||||
}
|
||||
|
||||
const main = () => {
|
||||
/*
|
||||
Problem Statement:
|
||||
You are a thief carrying a single bag with limited capacity S. The museum you stole had N artifact that you could steal. Unfortunately you might not be able to steal all the artifact because of your limited bag capacity.
|
||||
You have to cherry pick the artifact in order to maximize the total value of the artifacts you stole.
|
||||
|
||||
Link for the Problem: https://www.hackerrank.com/contests/srin-aadc03/challenges/classic-01-knapsack
|
||||
*/
|
||||
let input = `1
|
||||
4 5
|
||||
1 8
|
||||
2 4
|
||||
3 0
|
||||
2 5
|
||||
2 3`
|
||||
|
||||
input = input.trim().split('\n')
|
||||
input.shift()
|
||||
const length = input.length
|
||||
|
||||
let i = 0
|
||||
while (i < length) {
|
||||
const cap = Number(input[i].trim().split(' ')[0])
|
||||
const currlen = Number(input[i].trim().split(' ')[1])
|
||||
let j = i + 1
|
||||
const arr = []
|
||||
while (j <= i + currlen) {
|
||||
arr.push(input[j])
|
||||
j++
|
||||
}
|
||||
const newArr = []
|
||||
arr.map(e => {
|
||||
newArr.push(e.trim().split(' ').map(Number))
|
||||
})
|
||||
const cache = []
|
||||
for (let i = 0; i <= currlen; i++) {
|
||||
const temp = []
|
||||
for (let j = 0; j <= cap; j++) {
|
||||
temp.push(-1)
|
||||
}
|
||||
cache.push(temp)
|
||||
}
|
||||
const result = zeroOneKnapsack(newArr, currlen, cap, cache)
|
||||
console.log(result)
|
||||
i += currlen + 1
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
Reference in New Issue
Block a user