Louisville (16-11, 7-8 C-USA American) kept alive its slim hopes for an at-large berth to the NCAA Tournament and avenged a 77-50 loss at Cincinnati last month.
Reece Gaines scored 26 points for the Cardinals, who posted their first victory of the season against a ranked opponent. They also lost to Marquette and Kentucky.
Cincinnati (26-3, 13-2) had a chance to tie it, but Steve Logan and Taron Barker missed three-pointers as time was running out. The Bearcats missed a chance to clinch the American Division title.
Luke Whitehead's layup put Louisville ahead for good, 69-68, with 2:19 left. A dunk by Ellis Myles and one of two free throws by Bryant Northern made it 72-68 with 37.5 seconds remaining.
Immanuel McElroy's three-pointer with 18 seconds left pulled the Bearcats within a point before Gaines got behind the Cincinnati defense and converted an uncontested layup to give Louisville a 74-71 lead with 16.7 seconds to go.