Using dynamic programming and overlapping subproblems to address adjacency in large harvest scheduling problems