## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The gardener wants to maximize profit by growing lettuce and tomatoes in a 300 sqft backyard. The profit per sqft of lettuce is $2, and the profit per sqft of tomatoes is $3. However, there is a constraint on the amount of bug spray available, which is 255 mL. The bug spray requirements are 5 mL per sqft of lettuce and 7 mL per sqft of tomatoes.

## Decision Variables

Let $L$ be the number of sqft of lettuce and $T$ be the number of sqft of tomatoes.

## Objective Function

The objective is to maximize profit: $2L + 3T$.

## Constraints

1. **Backyard Space Constraint**: $L + T \leq 300$ (the total area used for lettuce and tomatoes cannot exceed 300 sqft).
2. **Bug Spray Constraint**: $5L + 7T \leq 255$ (the total amount of bug spray used cannot exceed 255 mL).
3. **Non-Negativity Constraints**: $L \geq 0, T \geq 0$ (the area used for lettuce and tomatoes cannot be negative).

## Gurobi Code

```python
import gurobi

def solve_gardening_problem():
    # Create a new model
    model = gurobi.Model()

    # Define decision variables
    L = model.addVar(lb=0, name="Lettuce")
    T = model.addVar(lb=0, name="Tomatoes")

    # Objective function: maximize profit
    model.setObjective(2*L + 3*T, gurobi.GRB.MAXIMIZE)

    # Backyard space constraint
    model.addConstr(L + T <= 300, name="Backyard_Space")

    # Bug spray constraint
    model.addConstr(5*L + 7*T <= 255, name="Bug_Spray")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found.")
        print(f"Lettuce: {L.varValue} sqft")
        print(f"Tomatoes: {T.varValue} sqft")
        print(f"Max Profit: ${2*L.varValue + 3*T.varValue}")
    else:
        print("No optimal solution found.")

solve_gardening_problem()
```