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

Let's denote:
- $x_1$ as the number of packages of seafood medley one to be sold.
- $x_2$ as the number of packages of seafood medley two to be sold.

The objective is to maximize profit. The profit per package of seafood medley one is $20, and the profit per package of seafood medley two is $25. So, the total profit can be represented by the equation $20x_1 + 25x_2$.

Now, let's consider the constraints based on the available quantities of scallops, mussels, and oysters:
- Each package of seafood medley one contains 20 grams of scallops, so $x_1$ packages will contain $20x_1$ grams of scallops. Similarly, each package of seafood medley two contains 40 grams of scallops, leading to $40x_2$ grams in total for $x_2$ packages. The market has 10000 grams of scallops available, so we have the constraint $20x_1 + 40x_2 \leq 10000$.
- For mussels, seafood medley one contains 30 grams per package, and seafood medley two contains 40 grams per package. With 12000 grams of mussels available, the constraint is $30x_1 + 40x_2 \leq 12000$.
- For oysters, with 50 grams in each package of seafood medley one and 20 grams in each package of seafood medley two, and 11000 grams available, we get $50x_1 + 20x_2 \leq 11000$.

Additionally, $x_1$ and $x_2$ must be non-negative since they represent the number of packages to be sold.

The problem can now be formulated as a linear programming problem:

Maximize: $20x_1 + 25x_2$

Subject to:
- $20x_1 + 40x_2 \leq 10000$
- $30x_1 + 40x_2 \leq 12000$
- $50x_1 + 20x_2 \leq 11000$
- $x_1, x_2 \geq 0$

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

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

# Define the decision variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="seafood_medley_one")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="seafood_medley_two")

# Set the objective function
m.setObjective(20*x1 + 25*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(20*x1 + 40*x2 <= 10000, "scallops")
m.addConstr(30*x1 + 40*x2 <= 12000, "mussels")
m.addConstr(50*x1 + 20*x2 <= 11000, "oysters")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Seafood Medley One: {x1.x}")
    print(f"Seafood Medley Two: {x2.x}")
    print(f"Total Profit: ${20*x1.x + 25*x2.x:.2f}")
else:
    print("No optimal solution found")
```