Capping values in a map while keeping one fixed
Your verify-alloc function is badly named: it doesn't verify, it normalises. 

A normalisation function that preserves the proportions of the other values and limits the sum to MaxAlloc is 

(defn normalise [m k]
  (let [remains (dissoc m k)
        allowance (- MaxAlloc (m k))
        weight (-&gt;&gt; remains
                    vals
                    (apply +))
        factor (/ allowance weight)]
    (if (&lt;= weight allowance)
      m
      (merge m (zipmap (keys remains) (map #(* factor %) (vals remains)))))))


This is written to be concise, not to be fast. 

If there'd nothing to be done, everything is hunky-dory:

(normalise {:a 0 :b 30 :c 40} :c)
;{:a 0, :b 30, :c 40}


But if the values need scaling, we can run into problems with arithmetic: 

(normalise {:a 90 :b 40 :c 70} :b)
;{:a 135/4, :b 40, :c 105/4}


If you want these as integers, you may have to forego some precision. How you do this is up to you.