NOIP2010普及組專練

NOIP2010普及組專練

1. P1179 數字統計

2.P1199 三國遊戲

紙老虎。

2.1 題目含義

給出不同武將之間的默契值,以及某種選將的方法,讓小涵勝出遊戲,如果能勝出,請給出小涵勝出時獲得的最大分數。

2.2主要思路

兩重for循環就可以解決問題。
第一重for 循環,用於遍歷找到每個數的可能;第二重循環用於找出除去最高默契值的第二高值,再比較機器選擇得到的最大默契值,比較二者大小。更新值的結果,最後輸出即可。

3.P1158 導彈攔截

3.1 錯誤思路:

1.對於每個輸入的值,不是由系統1攔截,就是由系統2攔截。那麼我們可以得到該導彈到系統1,系統2的距離分別是dis1,dis2。於是依次判斷,dis1,dis2誰更小,則讓該系統對該導彈負責。最後輸出值即可。

這種思路的錯誤在於,每次的貪心不一定是全局的最優解。這種反例肯定存在,我也就不解釋了。

3.2 正確思路

方法1:

  • 針對輸入數據,將每個導彈到系統1,2的距離分別存儲
  • 將導彈到系統1 的距離按照升序排序,那麼導彈到系統2的距離則是一種無序的狀態
  • 系統1,2將承包所有的導彈,那麼不是由系統1攔截的導彈必定由系統2攔截
  • 系統1攔截的範圍必定是某個範圍內的導彈全部攔截【即必定是按照升序排序】
  • 找到排序後的某個臨界點,判斷以該臨界點時,得到的最小代價是否最小,全局枚舉即可。
  • 臨界點可以設置成系統1承包的最後一個點。

方法2:

  • 將系統1 的距離從大到小的排序,那麼第一個距離值則可以設置成代價的初始值。【因爲這個系統1從大到小排序必定考慮了所有的導彈,也就是說,所有到導彈距離都不超過排序後的第一個值】
  • 從2開始枚舉直到n。那麼當前系統1的值 加上之前枚舉的所有系統2的最大值,將其和每次取最小。得到的解就是必定是最優解。
    舉例
s1  s2
100 0
99 10
98 3
90 20
83 15
...
13 89

s1代表系統1; s2代表系統2。那麼當枚舉到83時,即系統1可以覆蓋83的範圍,但是此時系統2還需要max(0,10,3,20,15) = 20的覆蓋。【83可以保證系統1在83後的所有覆蓋;20可以保證在83之前的系統2的所有覆蓋。】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章