簡單決策問題

2021-09-16 12:31:41 字數 1942 閱讀 7912

牛牛和妞妞從他們的好朋友小花那裡各個拿了乙個籃子,籃子裡面裝有同等數目的彩球,彩球上面有數字,他們都能看到自己以及對方籃子裡面的彩球上面的數字,於是他們決定做個遊戲,規則如下:

從對方籃子裡面拿走乙個球。

從自己籃子裡拿出乙個球累加到自己的總點數上。

只能從上面兩種選擇中取其一,也不能乙個都不做,妞妞先開始,兩個人交替做

牛牛和妞妞都很聰明

最後妞妞比牛牛總點數多多少?

思路如下:

牛牛和妞妞都很聰明,那他們肯定讓自己多得分,對方少得分。

把兩個籃子的彩球按照上面的數字大小降序排列

每次對比最大數字的那兩個彩球,如果發現對方比自己的大,那就扔掉對方的

如果自己比對方大或者相等,那就把自己的那個加到自己的總點數上

基於陣列下表操作即可

**如下:(一 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 現在的問題是,我們如何求出字典序最小?有個規律請牢記 正序前驅最小,逆序後繼最小。換句話說,逆推可以保證字典序最小。可能有些不太明白是什麼意思,不過我們不妨設想一下,逆...