codeves天梯 合併果子

2021-07-26 16:34:47 字數 966 閱讀 2784

在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。

每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n-1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。

因為還要花大力氣把這些果子搬回家,所以多多在合併果子時要盡可能地節省體力。假定每個果子重量都為1,並且已知果子的種類數和每種果子的數目,你的任務是設計出合併的次序方案,使多多耗費的體力最少,並輸出這個最小的體力耗費值。

例如有3種果子,數目依次為1,2,9。可以先將1、2堆合併,新堆數目為3,耗費體力為3。接著,將新堆與原先的第三堆合併,又得到新的堆,數目為12,耗費體力為12。所以多多總共耗費體力=3+12=15。可以證明15為最小的體力耗費值。

分析:經典題就不解釋了,這裡的合併果子資料不大,所以就用了歸併排序兼合併求解。

vara:array[0..10000] of longint;

n,total:longint;

i:integer;

procedure swap(var a,b:longint);

var t:integer;

begin

t:=a; a:=b; b:=t;

end;

procedure quick_sort(m,n:integer);

var i,j,x:integer;

begin

i:=m; j:=n; x:=a[(i+j) div 2];

repeat

while a[i]>x do inc(i);

while x>a[j] do dec(j);

if i<=j then

begin

swap(a[i],a[j]);

inc(i); dec(j);

end;

until i>j;

if m

codeves天梯 均分紙牌

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

codeves天梯 過河卒

如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通過對方馬的控制點。棋盤用座標表示,...

codeves天梯 產生數

給出乙個整數 n n 10 30 和 k 個變換規則 k 15 規則 一位數可變換成另乙個一位數 規則的右部不能為零。例如 n 234。有規則 k 2 2 5 3 6 上面的整數 234 經過變換後可能產生出的整數為 包括原數 234534 264564 共 4 種不同的產生數 問題 給出乙個整數 ...