To solve Lucas' problem, we need to maximize his profit by deciding how many acres of mango trees and durian trees he should plant. The decision variables are the number of acres for each type of tree.

Let's denote:
- \(M\) as the number of acres for mango trees,
- \(D\) as the number of acres for durian trees.

The objective function to maximize profit is given by the total revenue from selling mangos and durians minus the cost of maintaining the trees. The profit per acre from mango trees is $200 - $150 = $50, and from durian trees is $300 - $180 = $120.

So, the objective function to maximize is: \(50M + 120D\).

There are two main constraints:
1. **Budget Constraint**: The total cost of maintaining all acres must not exceed $20,000. This translates to \(150M + 180D \leq 20000\).
2. **Labor Constraint**: The total labor required must not exceed 700 days. Since mango trees require 6 days of labor per acre and durian trees require 3 days of labor per acre, we have \(6M + 3D \leq 700\).

Additionally, we have non-negativity constraints since Lucas cannot plant a negative number of acres: \(M \geq 0\) and \(D \geq 0\).

Lastly, considering the total land available is 150 acres, we also have: \(M + D \leq 150\).

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

```python
from gurobipy import *

# Create a new model
model = Model("Lucas_Trees")

# Define variables
M = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Mango_Acres")
D = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Durian_Acres")

# Set the objective function: Maximize profit
model.setObjective(50*M + 120*D, GRB.MAXIMIZE)

# Add constraints
model.addConstr(150*M + 180*D <= 20000, "Budget_Constraint")
model.addConstr(6*M + 3*D <= 700, "Labor_Constraint")
model.addConstr(M + D <= 150, "Land_Availability")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print(f"Optimal solution: Plant {M.x:.2f} acres of mango trees and {D.x:.2f} acres of durian trees.")
    print(f"Maximum profit: ${model.ObjVal:.2f}")
else:
    print("No optimal solution found")
```