codeves天梯 均分紙牌

2021-07-26 14:39:48 字數 875 閱讀 5313

有 n 堆紙牌,編號分別為 1,2,…, n。每堆上有若干張,但紙牌總數必為 n 的倍數。可以在任一堆上取若於張紙牌,然後移動。

移牌規則為:在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上;在編號為 n 的堆上取的紙牌,只能移到編號為 n-1 的堆上;其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。

現在要求找出一種移動方法,用最少的移動次數使每堆上紙牌數都一樣多。

例如 n=4,4 堆紙牌數分別為:

① 9 ② 8 ③ 17 ④ 6

移動3次可達到目的:

從 ③ 取 4 張牌放到 ④ (9 8 13 10) -> 從 ③ 取 3 張牌放到 ②(9 11 10 10)-> 從 ② 取 1 張牌放到①(10 10 10 10)。

分析:這題的思想是貪心,思路簡單來說就是從左開始做起,當發現左邊有多餘的牌放入右邊的牌堆中,重複如此,左邊的牌自然是最優的,所以是正解
var

a:array[1..1000] of longint;

m,i,j,n,s:longint;

begin

s:=0;

readln(n);

for i:=1 to n do

begin

read(a[i]);

m:=m+a[i];

end;

m:=m div n;

for i:=1 to n do

a[i]:=a[i]-m;

for i:=2 to n do

if a[i-1]<>0 then

begin

a[i]:=a[i]+a[i-1];

s:=s+1;

end;

writeln(s);

end.

天梯 1098 均分紙牌

解題報告 給出n堆紙牌,現在規定 第一堆的牌只能移動到第二堆,然後第n堆的牌只能移動到第n 1堆,然後其他的堆裡的牌可以往兩邊移動,一次可以移動任意張,問最少可以經過多少次移動才可以使得所有堆裡面的牌的數量相同 可以確定的是牌的總數是堆的數的整數倍 這題可以說是貪心,我的做法是定義乙個數,初始化為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的堆上 其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。現在要求找出一種移動方法,...