for day in range(num_days - 1, -1, -1):
V[day] = max(V[day + 1], (profit_matrix[day, day:] + gamma * V[day + 1: day + 1 + num_days - day]).max())
if profit_matrix[day, day:].max() >= V[day + 1]:
policy[day] = 1
return V[:-1], policy
value_function, policy = optimal_stopping(profit_matrix)
optimal_buy_day = np.argmax(policy)
optimal_buy_price = stock_prices[optimal_buy_day]
optimal_cost = costs[optimal_buy_day]
print(f"Optimal day to buy the stock: {optimal_buy_day}")
print(f"Optimal buy price: {optimal_buy_price:.2f}")
print(f"Optimal cost: {optimal_cost:.2f}")
print(f"Net profit: {(optimal_buy_price - optimal_cost):.2f}")