刷題 博弈論 三國遊戲

2022-08-13 21:21:18 字數 1120 閱讀 2158

(luogu)

首先,我們這個解法獲勝的思路是,每個武將對應的所有配對值中最大的值,已經被拆散

在這種情況下,場上存在的只剩所有的「次大值」,就是我們拿來排序的那一堆

這時候小涵拿到了「次大值」中的最大值,肯定是場上最高的分數

為什麼呢?用反證法

按照小涵的選法,小涵第一次選了武將i,其中i對應的最大值是j,次大值是l,即i-j > i-l

這裡的'-'是對應的意思

這時候,計算機一定會選擇j

如果j對應的所有配對值中,最大值也是i,那麼i和j這兩個點的對應最大值都被拆散了

是不是j對應的最大值一定是i呢?是的

假設j對應的最大值是k,i是j對應的次大值,即j-k > j-i

那麼就有j-k > j-i > i-l,這時候我們肯定會選擇j作為第乙個武將

因為j-i(j的對應次大值)大於i-l(i的對應次大值),與選法矛盾

也就是說,我們第一次選了i,取得了次大值中的最大值,同時拆掉了i的最大值和j的最大值

接下來小涵選了l,然後計算機選了另乙個武將m

計算機選m有兩種原因:一是l-m是l的最大值,拆了最大值正合我意

一是i-m比l的最大值更大(但是不會比i-l大),即i-l > i-m > l的最大值

這時候l的最大值拆不拆都是無所謂的,反正小於我們的i-l

然後小涵選了n拆了m的最大值m-n

計算機接著拆最大值,要麼是n的最大值,要麼比i-l小,證法同上

兩個人就這麼拆最大值,就把最大值拆完了,剩下的就是次大值,我們的i-l就是次大值中最大的

#include#include

#include

using

namespace

std;

intn;

int d[503][503

];int

ans,mx1,mx2;

intmain()

mx1=mx2=0

;

for(int j=1;j<=n;j++)

ans=max(ans,mx2);

}printf(

"%d\n%d\n

",1,ans);

return0;

}

NOIP2010pj三國遊戲 博弈論

小涵很喜歡電腦遊戲,這些天他正在玩乙個叫做 三國 的遊戲。在遊戲中,小涵和計算機各執一方,組建各自的軍隊進行對戰。遊戲中共有 n 位武將 n為偶數且不小於 4 任意兩個武將之間有乙個 默契值 表示若此兩位武將作為一對組合作戰時,該組合的威力有多大。遊戲開始前,所有武將都是自由的 稱為自由武將,一旦某...

三國遊戲,洛谷之提高歷練地,博弈論(3 6)

前話 博弈論考慮遊戲中的個體的 行為和實際行為,並研究它們的優化策略。博弈論?就是類似 高階 貪心的東西。正題第一題 三國遊戲 這題是普及組的,主要題意就是說,有乙個人和電腦博弈,每兩個武將之間有乙個默契值。然後求取每一行第二大的值最大。明顯的,求次大值最大 include include incl...

博弈論刷題記

刷了一些博弈論的結論題就不記錄了,把一些有價值的題記錄一下吧。sg函式打表找規律 include using namespace std const int maxn 1e4 100 int sg maxn int main int cnt 0 while s.count cnt cnt sg i ...