public int topDownRecursive(int values[], int weights[], int W) {
        //map of key(remainingWeight, remainingCount) to maximumValue they can get.
        Map<Index, Integer> map = new HashMap<>();
        return topDownRecursiveUtil(values, weights, W, values.length, 0, map);
    }
Solves 0/1 knapsack in top down DP
src/com/interview/dynamic/Knapsack01.java