Data-Structures-and-Algorithms Algorithms Dynamic programming nCr LCS LIS 0-1 knapsack coin change rock climbing bitmask travelling salesman Data Structures