Noip 1320 均分紙牌(貪心)

2021-08-20 06:22:35 字數 898 閱讀 5172

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

提交數: 1099     通過數: 570 

有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)。

所有堆均達到相等時的最少移動次數。

4

9 8 17 6

3

no直接上源**吧!

#include

#include

using

namespace std;

int a[

10000

];int

main

()for

(int i=

1;i<=n;++i)

while

(a[i]==

0&&iwhile

(a[j]==

0&&j>

1)--j;

while

(icout<}

1320 例6 2 均分紙牌 Noip2002

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

貪心 均分紙牌

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

貪心 均分紙牌

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