```json
{
  "sym_variables": [
    ("x0", "milligrams of zinc"),
    ("x1", "milligrams of calcium"),
    ("x2", "milligrams of vitamin B2"),
    ("x3", "milligrams of vitamin K")
  ],
  "objective_function": "5*x0 + 3*x1 + 5*x2 + 7*x3",
  "constraints": [
    "7*x0 + 7*x2 + 11*x3 >= 19",
    "7*x0 + 9*x1 + 11*x3 >= 19",
    "7*x0 + 9*x1 + 7*x2 >= 19",
    "7*x0 + 7*x2 + 11*x3 >= 15",
    "7*x0 + 9*x1 + 11*x3 >= 15",
    "7*x0 + 9*x1 + 7*x2 >= 15",
    "7*x0 + 7*x2 + 11*x3 >= 14",
    "7*x0 + 9*x1 + 11*x3 >= 14",
    "7*x0 + 9*x1 + 7*x2 >= 14",
    "8*x0 + 1*x1 + 10*x2 >= 10",
    "8*x0 + 10*x2 + 5*x3 >= 10",
    "8*x0 + 1*x1 + 10*x2 >= 10",
    "8*x0 + 10*x2 + 5*x3 >= 10",
    "7*x0 + 11*x3 <= 77",
    "7*x0 + 9*x1 <= 54",
    "7*x0 + 7*x2 <= 60",
    "7*x0 + 7*x2 + 11*x3 <= 88",
    "7*x0 + 9*x1 + 7*x2 <= 39",
    "7*x0 + 9*x1 + 7*x2 + 11*x3 <= 39",
    "8*x0 + 1*x1 <= 48",
    "10*x2 + 5*x3 <= 53",
    "8*x0 + 1*x1 + 10*x2 + 5*x3 <= 53",
    "x0 integer",
    "x2 integer",
    "x3 integer",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0",
    "x3 >= 0"


  ]
}
```

```python
import gurobipy as gp

# Create a new model
m = gp.Model("nutrition_optimization")

# Create variables
zinc = m.addVar(vtype=gp.GRB.INTEGER, name="zinc")
calcium = m.addVar(vtype=gp.GRB.CONTINUOUS, name="calcium")
vitamin_b2 = m.addVar(vtype=gp.GRB.INTEGER, name="vitamin_b2")
vitamin_k = m.addVar(vtype=gp.GRB.INTEGER, name="vitamin_k")


# Set objective function
m.setObjective(5*zinc + 3*calcium + 5*vitamin_b2 + 7*vitamin_k, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(7*zinc + 7*vitamin_b2 + 11*vitamin_k >= 19)
m.addConstr(7*zinc + 9*calcium + 11*vitamin_k >= 19)
m.addConstr(7*zinc + 9*calcium + 7*vitamin_b2 >= 19)

m.addConstr(7*zinc + 11*vitamin_k <= 77)
m.addConstr(7*zinc + 9*calcium <= 54)
m.addConstr(7*zinc + 7*vitamin_b2 <= 60)
m.addConstr(7*zinc + 7*vitamin_b2 + 11*vitamin_k <= 88)
m.addConstr(7*zinc + 9*calcium + 7*vitamin_b2 <= 39)
m.addConstr(7*zinc + 9*calcium + 7*vitamin_b2 + 11*vitamin_k <= 39)


m.addConstr(8*zinc + 1*calcium <= 48)
m.addConstr(10*vitamin_b2 + 5*vitamin_k <= 53)
m.addConstr(8*zinc + 1*calcium + 10*vitamin_b2 + 5*vitamin_k <= 53)

m.addConstr(8*zinc + 1*calcium + 10*vitamin_b2 >= 10)
m.addConstr(8*zinc + 10*vitamin_b2 + 5*vitamin_k >= 10)



# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    print('zinc:', zinc.x)
    print('calcium:', calcium.x)
    print('vitamin_b2:', vitamin_b2.x)
    print('vitamin_k:', vitamin_k.x)
elif m.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status:", m.status)

```