Discrete Dynamic Programming with Unbounded Rewards