你有一堆石頭質量分別為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 第一行...