To solve the given optimization problem using Gurobi, we first need to understand the variables and constraints involved. The variables are 'corn cobs' (x0) and 'cherry pies' (x1), with their respective resource/attribute contributions given for grams of fat, sourness index, and milligrams of calcium.

Given:
- Objective function: Maximize 7.91*x0 + 4.62*x1
- Constraints:
  - Fat from corn cobs and cherry pies: 20*x0 + 16*x1 ≥ 56 (minimum) and ≤ 101 (maximum)
  - Sourness index: 15*x0 + 16*x1 ≥ 39 (minimum) and ≤ 47 (maximum)
  - Calcium: 16*x0 + 15*x1 ≥ 25 (minimum) and ≤ 97 (maximum)
  - Additional constraint: -3*x0 + 9*x1 ≥ 0

Since 'corn cobs' can be a non-integer, we will model x0 as a continuous variable. However, since 'cherry pies' must be a whole number, we will model x1 as an integer variable.

Here is the Gurobi code that captures this problem:

```python
from gurobipy import *

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

# Define variables
x0 = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.CONTINUOUS, name="corn_cobs")
x1 = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.INTEGER, name="cherry_pies")

# Define the objective function
m.setObjective(7.91*x0 + 4.62*x1, GRB.MAXIMIZE)

# Add constraints
m.addConstr(20*x0 + 16*x1 >= 56, "min_fat")
m.addConstr(20*x0 + 16*x1 <= 101, "max_fat")
m.addConstr(15*x0 + 16*x1 >= 39, "min_sourness")
m.addConstr(15*x0 + 16*x1 <= 47, "max_sourness")
m.addConstr(16*x0 + 15*x1 >= 25, "min_calcium")
m.addConstr(16*x0 + 15*x1 <= 97, "max_calcium")
m.addConstr(-3*x0 + 9*x1 >= 0, "additional_constraint")

# Optimize the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Corn cobs: {x0.x}")
    print(f"Cherry pies: {int(x1.x)}")
else:
    print("No optimal solution found.")
```