SSL 石子歸併

2021-10-23 11:45:48 字數 1123 閱讀 6546

你有一堆石頭質量分別為w1,w2,w3…wn.(w<=100000)現在需要你將石頭合併為兩堆,使兩堆質量的差為最小。

測試資料第一行為整數n(1<=n<=20),表示有n堆石子。第二行為n個數,為每堆石子的質量。

每組測試資料只需輸出合併後兩堆的質量差的最小值。

558

1327

14

3
這道題其實可以用搜尋,但我的方法是動規。

它的狀態轉移公式是:

i f(

j>=b

[i])

a[j]

=max

(a[j

],a[

j−b[

i]]+

b[i]

);g=

min(

g,ab

s(s−

a[j]

−a[j

]));

if(j>=b[i]) a[j]=max(a[j],a[j-b[i]]+b[i]); g=min(g,abs(s-a[j]-a[j]));

if(j

>=b

[i])

a[j]

=max

(a[j

],a[

j−b[

i]]+

b[i]

);g=

min(

g,ab

s(s−

a[j]

−a[j

]));

#include

#include

#include

#include

#include

#include

using

namespace std;

int g=

214748364

,n,i,j,t,s=

0,a[

1000010

],b[

200]

;int

main()

t=s/2;

for(i=

1;i<=n;i++)}

cout

}

SSL 合併石子

在乙個操場上一排地擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。請設計乙個程式,計算出將n堆石子合併成一堆的最小得分。每組資料第1行為乙個正整數n 2 n 100 以下n行,每行乙個正整數,小於10000,分別表示第i...

DP 石子歸併

wikioi 1048 石子歸併 有n堆石子排成一列,每堆石子有乙個重量w i 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w i w i 1 問安排怎樣的合併順序,能夠使得總合併代價達到最小。輸入描述 input description 第一行乙個整數n n 100 第二行n個...

codevs 石子歸併

codevs 1048 石子歸併 題目描述 description 有n堆石子排成一列,每堆石子有乙個重量w i 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w i w i 1 問安排怎樣的合併順序,能夠使得總合併代價達到最小。輸入描述 input description 第一行...