## Step 1: Define the optimization problem
The goal is to minimize the objective function: $7.5z + 5.18b + 3.52n + 8.91c$, where $z$ represents milligrams of zinc, $b$ represents milligrams of vitamin B12, $n$ represents milligrams of vitamin B3, and $c$ represents milligrams of vitamin C.

## 2: List all constraints
1. $5z + 1b \geq 36$
2. $5z + 18n \geq 19$
3. $1b + 18n + 19c \geq 29$
4. $5z + 1b + 19c \geq 29$
5. $5z + 18n + 19c \geq 29$
6. $1b + 18n + 19c \geq 42$
7. $5z + 1b + 19c \geq 42$
8. $5z + 18n + 19c \geq 42$
9. $1b + 18n + 19c \geq 32$
10. $5z + 1b + 19c \geq 32$
11. $5z + 18n + 19c \geq 32$
12. $5z + 1b + 18n + 19c \geq 32$
13. $2b + 5c \geq 69$
14. $2b + 13n \geq 61$
15. $5z + 13n \geq 64$
16. $5z + 5c \geq 30$
17. $5z + 13n + 5c \geq 77$
18. $5z + 2b + 13n + 5c \geq 77$
19. $8b - 4n \geq 0$
20. $5z + 1b + 19c \leq 100$
21. $5z + 1b + 18n \leq 194$
22. $5z + 18n + 19c \leq 74$
23. $5z + 2b + 13n \leq 279$
24. $5z + 2b + 5c \leq 292$
25. $5z + 13n + 5c \leq 166$

## 3: Define variable bounds and types
- $z$ (milligrams of zinc) can be fractional.
- $b$ (milligrams of vitamin B12) can be fractional.
- $n$ (milligrams of vitamin B3) must be an integer.
- $c$ (milligrams of vitamin C) can be fractional.

## 4: Implement the optimization problem using Gurobi
```python
import gurobi as gp

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

# Define variables
z = m.addVar(name="zinc", lb=0)  # Fractional
b = m.addVar(name="vitamin_B12", lb=0)  # Fractional
n = m.addVar(name="vitamin_B3", lb=0, integrality=gp.GRB.INTEGER)  # Integer
c = m.addVar(name="vitamin_C", lb=0)  # Fractional

# Objective function
m.setObjective(7.5 * z + 5.18 * b + 3.52 * n + 8.91 * c, gp.GRB.MINIMIZE)

# Constraints
m.addConstr(5 * z + 1 * b >= 36)
m.addConstr(5 * z + 18 * n >= 19)
m.addConstr(1 * b + 18 * n + 19 * c >= 29)
m.addConstr(5 * z + 1 * b + 19 * c >= 29)
m.addConstr(5 * z + 18 * n + 19 * c >= 29)
m.addConstr(1 * b + 18 * n + 19 * c >= 42)
m.addConstr(5 * z + 1 * b + 19 * c >= 42)
m.addConstr(5 * z + 18 * n + 19 * c >= 42)
m.addConstr(1 * b + 18 * n + 19 * c >= 32)
m.addConstr(5 * z + 1 * b + 19 * c >= 32)
m.addConstr(5 * z + 18 * n + 19 * c >= 32)
m.addConstr(5 * z + 1 * b + 18 * n + 19 * c >= 32)
m.addConstr(2 * b + 5 * c >= 69)
m.addConstr(2 * b + 13 * n >= 61)
m.addConstr(5 * z + 13 * n >= 64)
m.addConstr(5 * z + 5 * c >= 30)
m.addConstr(5 * z + 13 * n + 5 * c >= 77)
m.addConstr(5 * z + 2 * b + 13 * n + 5 * c >= 77)
m.addConstr(8 * b - 4 * n >= 0)
m.addConstr(5 * z + 1 * b + 19 * c <= 100)
m.addConstr(5 * z + 1 * b + 18 * n <= 194)
m.addConstr(5 * z + 18 * n + 19 * c <= 74)
m.addConstr(5 * z + 2 * b + 13 * n <= 279)
m.addConstr(5 * z + 2 * b + 5 * c <= 292)
m.addConstr(5 * z + 13 * n + 5 * c <= 166)

# Solve the model
m.optimize()

# Print the solution
if m.status == gp.GRB.OPTIMAL:
    print("Objective: ", m.objVal)
    print("Zinc: ", z.varValue)
    print("Vitamin B12: ", b.varValue)
    print("Vitamin B3: ", n.varValue)
    print("Vitamin C: ", c.varValue)
else:
    print("The model is infeasible")
```