```python
def parse_amount(text: str) -> int:
    """Convert a decimal amount string to integer cents."""
    if not isinstance(text, str):
        raise ValueError("Input must be a string.")
    parts = text.split('.')
    if len(parts) == 2 and parts[1].isdigit() and len(parts[1]) == 2:
        integer_part = int(parts[0])
        fractional_part = int(parts[1])
        return integer_part * 100 + fractional_part
    elif text.isdigit():
        return int(text) * 100
    else:
        raise ValueError("Invalid amount format.")

def format_amount(cents: int) -> str:
    """Convert non-negative integer cents to a dotted decimal string."""
    if not isinstance(cents, int) or cents < 0:
        raise ValueError("Input must be a non-negative integer.")
    return f"{cents // 100}.{cents % 100:02d}"

def allocate_cents(total_cents: int, weights: list) -> list:
    """Allocate total_cents proportionally across weights."""
    if not isinstance(weights, list) or not weights:
        raise ValueError("Weights must be a non-empty list.")
    if any(not (isinstance(w, int) and w >= 0) for w in weights):
        raise ValueError("All weights must be non-negative integers.")
    if sum(weights) == 0:
        raise ValueError("Sum of weights must be greater than zero.")
    if not isinstance(total_cents, int) or total_cents < 0:
        raise ValueError("Total cents must be a non-negative integer.")

    proportional_values = [total_cents * w // sum(weights) for w in weights]
    remainder = total_cents - sum(proportional_values)
    largest_remainders = sorted(range(len(weights)), key=lambda i: (proportional_values[i] % weights[i], -i))

    shares = proportional_values[:]
    for index in largest_remainders:
        if remainder > 0:
            shares[index] += 1
            remainder -= 1

    return shares
```