首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDU 5281 Senior's Gun:貪心策略最大化殺怪得分

     編輯:關於C++

題目大意

n 支槍(攻擊力 a_i),m 隻怪(防禦力 b_j)。槍攻擊力 ≥ 怪防禦力可秒殺,得分 = 攻擊力 - 防禦力。每槍限殺一怪,每怪限被一槍殺。求最大總得分。

貪心證明

設選用槍攻擊力集合 A、怪防禦力集合 B,|A|=|B|=k。若存在 a∈A, b∈B 使 a < b,則該槍無法殺該怪。考慮將這對替換為:用最大攻擊力槍殺最小防禦力怪。
不失一般性,設 A、B 均按升序排列。若 A 的最小值 < B 的最大值,則存在無法配對的情況。最優策略:雙雙排序,最大攻擊力配最小防禦力,次大配次小,直到無法殺為止。此時所有配對均合法且得分和最大(交換論證)。

算法流程

  1. 槍攻擊力升序,怪防禦力升序。
  2. 雙指針:i=n-1(槍從大到小),j=0(怪從小到大)。
  3. 若 a[i] > b[j],累加 a[i]-b[j],i--, j++;否則停止。

C++ 實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved