I found an online judge, SPOJ, testing solutions to this problem here: https://www.spoj.com/problems/KNAPSACK/
Here is my accepted(https://www.spoj.com/status/KNAPSACK,chandniverma/) solution to the same:
import java.util.*; import java.lang.*; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner sc = new Scanner (System.in); int s = sc.nextInt(); int n = sc.nextInt(); int[] size = new int[n+1]; long[] val = new long[n+1]; for (int i=1; i<=n; i++) { size[i] = sc.nextInt(); val[i] = sc.nextInt(); } sc.close(); long[][] memo = new long[n+1][s+1]; for (int i=0; i<=n; i++) { for (int j=0; j<=s; j++) { memo[i][j] = -1; } } System.out.println(getMaxVal(size, val, s, n, memo)); } private static long getMaxVal(int[] size, long[] val, int s, int n, long[][] memo) { if (n<=0 || s<=0) return 0; if (memo[n][s] != -1) return memo[n][s]; if ((s-size[n]) >= 0) { return memo[n][s] = Math.max ( val[n] + getMaxVal(size, val, s-size[n], n-1, memo), getMaxVal(size, val, s, n-1, memo) ); } else { return memo[n][s] = getMaxVal(size, val, s, n-1, memo); } } }
This solution works with a complexity of O(n*s) where n is the number of items under consideration and s is the size or capacity of the bag.
You can always find my SPOJ profile with solved problem list at https://www.spoj.com/users/chandniverma/.
You can always find my SPOJ profile with solved problem list at https://www.spoj.com/users/chandniverma/.
You can also checkout my recent-most submissions at SPOJ on https://www.spoj.com/status/chandniverma/.
Feel free to share optimisations and improvisations in comments below!
See ya next time!
<3✌
No comments:
Post a Comment