有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)。
n(n 堆紙牌,1 ≤ n ≤ 100)
a1 a2 … an (n 堆紙牌,每堆紙牌初始數,l≤ ai ≤10000)。
所有堆均達到相等時的最少移動次數。
49 8 17 6
3思路:
求平均數,然後每個數減去平均數,然後不管是正數還是負數,都向下乙個移動,最後會都等於0
至於這題是貪心,應該是每一步驟都是變為0,這種求解吧。
#includeusing namespace std;
int main()
int a=flag/n;
for(int i=0;i
Noip 1320 均分紙牌(貪心)
時間限制 1000 ms 記憶體限制 65536 kb 提交數 1099 通過數 570 有n堆紙牌,編號分別為 1,2,n。每堆上有若干張,但紙牌總數必為n的倍數。可以在任一堆上取若干張紙牌,然後移動。移牌規則為 在編號為1的堆上取的紙牌,只能移到編號為 2 的堆上 在編號為 n 的堆上取的紙牌,...
RQNOJ 62 NOIP2002 均分紙牌
rqnoj 62 我們可以將牌在相鄰堆之間的移動想象成經過了一條邊,那麼任意兩堆相鄰的牌之間都會有一條邊,而且在最優情況下每條邊應當是至多經過一次的,如果超過一次的話也可以通過相消變成至多經過一次。那麼如何確定一條邊要不要被走呢?實際上對於任意一條邊來講,都將牌劃分成了左右兩部分,如果兩部分各自內部...
NOip2002均分紙牌
題目描述 有 n 堆紙牌,編號分別為 1,2,n。每堆上有若干張,但紙牌總數必為 n 的倍數。可以在任一堆上取若於張紙牌,然後移動。移牌規則為 在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上 在編號為 n 的堆上取的紙牌,只能移到編號為 n 1 的堆上 其他堆上取的紙牌,可以移到相鄰左邊或右...