## Problem Description and Formulation

The gardener has a field of 100 square feet and wants to plant sunflowers and roses to maximize profit. The costs and profits per square foot for each type of plant are given as follows:

- Sunflowers: Cost = $67 per square foot, Profit = $450 per square foot
- Roses: Cost = $52 per square foot, Profit = $100 per square foot

The gardener has a budget of $6500 for seeds.

## Mathematical Formulation

Let \(S\) be the number of square feet planted with sunflowers and \(R\) be the number of square feet planted with roses.

The objective is to maximize the total profit \(P = 450S + 100R\).

Subject to the constraints:
1. \(S + R \leq 100\) (total area constraint)
2. \(67S + 52R \leq 6500\) (budget constraint)
3. \(S \geq 0, R \geq 0\) (non-negativity constraints)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    S = model.addVar(lb=0, name="Sunflowers")
    R = model.addVar(lb=0, name="Roses")

    # Objective function: Maximize profit
    model.setObjective(450 * S + 100 * R, gurobi.GRB.MAXIMIZE)

    # Add constraints
    model.addConstr(S + R <= 100, name="Area_Constraint")
    model.addConstr(67 * S + 52 * R <= 6500, name="Budget_Constraint")

    # Optimize model
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found. Sunflowers: {S.varValue}, Roses: {R.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_gardener_problem()
```

This code defines a Gurobi model for the gardener's problem, sets up the objective function and constraints, and solves the optimization problem. If an optimal solution is found, it prints the optimal values for sunflowers and roses and the maximum profit. Otherwise, it indicates that no optimal solution was found.