牛牛和妞妞從他們的好朋友小花那裡各個拿了乙個籃子,籃子裡面裝有同等數目的彩球,彩球上面有數字,他們都能看到自己以及對方籃子裡面的彩球上面的數字,於是他們決定做個遊戲,規則如下:
從對方籃子裡面拿走乙個球。
從自己籃子裡拿出乙個球累加到自己的總點數上。
只能從上面兩種選擇中取其一,也不能乙個都不做,妞妞先開始,兩個人交替做
牛牛和妞妞都很聰明
最後妞妞比牛牛總點數多多少?
思路如下:
牛牛和妞妞都很聰明,那他們肯定讓自己多得分,對方少得分。
把兩個籃子的彩球按照上面的數字大小降序排列
每次對比最大數字的那兩個彩球,如果發現對方比自己的大,那就扔掉對方的
如果自己比對方大或者相等,那就把自己的那個加到自己的總點數上
基於陣列下表操作即可
**如下:(一 main到底)
#include
#include
using
namespace std;
intcmp
(int a,
int b)
intmain()
for(
int i =
0; i < n; i++
)sort
(girl, girl + n, cmp)
;sort
(boy, boy + n, cmp)
;int tota_of_girl =0;
int total_of_boy =0;
int boundary =0;
//邊界條件
int index_of_girl =0;
int index_of_boy =0;
while
(boundary < n*2)
}else
} boundary++;}
delete
girl;
delete
boy;
cout << tota_of_girl - total_of_boy;
return0;
}
看乙個例子
7 3 9 8 8
9 9 6 7 4
排序後9 8 8 7 3
9 9 7 6 4
決策ing
妞妞+9 妞妞剩餘 8 8 7 3 牛牛剩餘 9 9 7 6 4
牛牛+9 妞妞剩餘 8 8 7 3 牛牛剩餘 9 7 6 4
妞妞不變 妞妞剩餘 8 8 7 3 牛牛剩餘 7 6 4
牛牛不變 妞妞剩餘 8 7 3 牛牛剩餘 7 6 4
妞妞+8 妞妞剩餘 7 3 牛牛剩餘 7 6 4
牛牛+7 妞妞剩餘 7 3 牛牛剩餘 6 4
妞妞+7 妞妞剩餘 3 牛牛剩餘 6 4
牛牛+6 妞妞剩餘 3 牛牛剩餘 4
妞妞不變 妞妞剩餘 3 牛牛剩餘0
牛牛不變 妞妞剩餘 0 牛牛剩餘 0
總點數妞妞—牛牛:24-22=2
結果圖
**有點亂 核心在這
while
(boundary < n*2)
}else
} boundary++
;}
既用boundary作為邊界條件,也用來對二取模判斷是妞妞操作還是牛牛操作
不管是加上自己的還是拿走別人的 都用對陣列下標+1來進行推進
**中用了c++ stl封裝的 sort函式進行排序,因為太懶了,這個sort是基於快排的,o(1)的空間,o(nlogn)的時間。
所以總體時間複雜度為o(nlogn)。
最優決策和最滿意決策問題
蘇格拉底 摘麥穗問題 古希臘哲學大師蘇格拉底的三個 求教老師 怎樣才能獲得成功?蘇格拉底沒有直接回答,讓他們去麥田,只許往前走,且僅有一次機會,要求是 選摘乙個最好最大的麥穗。第乙個 沒走幾步就看見乙個又大又漂亮的麥穗,高興地摘下來繼續往前走,發現前面還有好多更好的,但是自己的一次機會已經用過了,只...
多階段決策問題
每做一次決策就可以得到解的一部分,當所有決策做完以後,完整的解就 浮出水面 在回溯法中,每次決策對應於給乙個結點產生新的子樹,而解的生成過程對應一顆解答樹,結點的層數就是下乙個待填充的位置 uva116 1 include iostream 2 include cstdio 3 include cs...
劉書學習筆記(3)多階段決策問題
狀態 從 i j 開始的最小開銷 轉移 dp i j min dp i 1 j 1 m dp i j 1 dp i 1 j 1 m 現在的問題是,我們如何求出字典序最小?有個規律請牢記 正序前驅最小,逆序後繼最小。換句話說,逆推可以保證字典序最小。可能有些不太明白是什麼意思,不過我們不妨設想一下,逆...