n 支槍(攻擊力 a_i),m 隻怪(防禦力 b_j)。槍攻擊力 ≥ 怪防禦力可秒殺,得分 = 攻擊力 - 防禦力。每槍限殺一怪,每怪限被一槍殺。求最大總得分。
設選用槍攻擊力集合 A、怪防禦力集合 B,|A|=|B|=k。若存在 a∈A, b∈B 使 a < b,則該槍無法殺該怪。考慮將這對替換為:用最大攻擊力槍殺最小防禦力怪。
不失一般性,設 A、B 均按升序排列。若 A 的最小值 < B 的最大值,則存在無法配對的情況。最優策略:雙雙排序,最大攻擊力配最小防禦力,次大配次小,直到無法殺為止。此時所有配對均合法且得分和最大(交換論證)。
i=n-1(槍從大到小),j=0(怪從小到大)。a[i] > b[j],累加 a[i]-b[j],i--, j++;否則停止。