pub fn solve(problem: &KnapsackProblem) -> Result<KnapsackSolution>
Solve 0-1 knapsack using dynamic programming