To solve this optimization problem, we need to define the decision variables, objective function, and constraints. 

Let's denote:
- $x$ as the number of acres for growing blueberries,
- $y$ as the number of acres for growing raspberries.

The objective is to maximize profit. The profit per acre from blueberries is $200, and from raspberries is $250. Therefore, the total profit can be represented as $200x + 250y$.

There are two main constraints:
1. **Fertilizer Cost Constraint**: Each acre of blueberries costs $60 for fertilizer, and each acre of raspberries costs $40. The farmer has a budget of $20,000 for fertilizer. This constraint can be written as $60x + 40y \leq 20000$.
2. **Picking Time Constraint**: Each acre of blueberries requires 3 hours of picking, and each acre of raspberries requires 4 hours. The farmer has 400 hours available for picking. This constraint can be represented as $3x + 4y \leq 400$.
3. **Land Availability Constraint**: The farmer has 300 acres of land in total. Therefore, $x + y \leq 300$.

All acres allocated must be non-negative, so we also have $x \geq 0$ and $y \geq 0$.

Now, let's write the Gurobi code to solve this linear programming problem:

```python
from gurobipy import *

# Create a new model
m = Model("Berry_Farming")

# Define variables
blueberry_acres = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Blueberry_Acres")
raspberry_acres = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Raspberry_Acres")

# Set the objective function: Maximize profit
m.setObjective(200*blueberry_acres + 250*raspberry_acres, GRB.MAXIMIZE)

# Add constraints
m.addConstr(60*blueberry_acres + 40*raspberry_acres <= 20000, name="Fertilizer_Budget")
m.addConstr(3*blueberry_acres + 4*raspberry_acres <= 400, name="Picking_Time")
m.addConstr(blueberry_acres + raspberry_acres <= 300, name="Land_Availability")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: Blueberries = {blueberry_acres.x}, Raspberries = {raspberry_acres.x}")
    print(f"Maximum Profit: ${m.objVal}")
else:
    print("No optimal solution found")
```