取紙牌遊戲(貪心)

2021-08-25 19:41:15 字數 1218 閱讀 1730

取紙牌遊戲

總時間限制: 1000ms 記憶體限制: 65536kb

描述

有n張紙牌,每張牌上寫著乙個整數ai。alice和bob玩取紙牌遊戲。玩法是這樣的:每人輪流從紙牌堆裡取一張牌,alice先取。當所有牌取完後,遊戲結束。每人的得分是他取到的牌上整數之和。如果他們每次都按最優策略取牌使自己的得分最大化。求遊戲結束後alice的得分減去bob得分的結果。

輸入

第1行:1個整數n,表示牌的張數(1<=n<=100)

第2行:n個整數,表示每張牌上的整數ai(1<=ai<=1000)

輸出 第1行:1個整數,表示alice的得分減去bob的得分的差值

樣例輸入

2

3 1

樣例輸出

2
提示

alice先取,按最優策略,她取走3,bob取走1。因此得分之差為:3-1=2

思路點拔:由於本題中,alice與bob都是選擇最優的取牌方式,所以,本題又變成了一到典型的貪心,我們來走一走他們的取牌過程:首先,alice一定會去最大的牌,然後bob也不甘示弱,取第二大的牌,接著,alice會取走第三大的牌,隨後,bob會取走第四大的牌……接著alice會取走k大的牌,bob會取走k+1大的牌,這樣確實是區域性最優解,也確實能推到全域性最優解,所以,我們將數列進行從大到小排序,然後將下標為奇數的累加起來,表示alice的最終得分,將下標為偶數的累加起來,表示bob的最終得分,最後,用alice的得分減去bob的得分就是答案!!上**!

#include

#include

using

namespace

std;

int sum,sum1;

bool cmp(int x,int y) //從小到大排序(相當於運算子過載)

int main()

sort(a+1,a+n+1,cmp); //排序

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

printf("%d\n",sum-sum1); //算出兩人的分差並輸出

return

0; //結束

}

貪心 均分紙牌

時間限制 1 sec 記憶體限制 64 mb 提交 164 解決 95 提交 狀態 討論版 有n堆紙牌,編號分別為1,2,n。每堆上有若干張,但紙牌總數必為n的倍數。可以在任一堆上取若干張紙牌,然後移動。移牌規則為 在編號為1堆上取的紙牌,只能移到編號為2的堆上 在編號為n的堆上取的紙牌,只能移到編...

貪心 均分紙牌

題目鏈結 題目描述 有n堆紙牌,編號分別為 1,2,n。每堆上有若干張,但紙牌總數必為n的倍數。可以在任一堆上取若干張紙牌,然後移動。移牌規則為 在編號為1堆上取的紙牌,只能移到編號為2的堆上 在編號為n的堆上取的紙牌,只能移到編號為n 1的堆上 其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。現在...

均分紙牌(貪心)

有n堆紙牌,編號分別為1,2,n。每堆上有若干張,但紙牌總數必為n的倍數。可以在任一堆上取若干張紙牌,然後移動。移牌規則為 在編號為1的堆上取的紙牌,只能移到編號為2的堆上 在編號為n的堆上取的紙牌,只能移到編號為n 1的堆上 其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。現在要求找出一種移動方法...