時間限制: 1 s
空間限制: 256000 kb
題目等級 : 鑽石 diamond
題解檢視執行結果
description
有n堆石子排成一列,每堆石子有乙個重量w[i], 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w[i]+w[i+1]。問安排怎樣的合併順序,能夠使得總合併代價達到最小。
輸入描述
input description
第一行乙個整數n(n<=3000)
第二行n個整數w1,w2...wn (wi <= 3000)
輸出描述
output description
乙個整數表示最小合併代價
樣例輸入
sample input
4 1 1 4
樣例輸出
sample output
資料範圍及提示
data size & hint
資料範圍相比「石子歸併」 擴大了
分類標籤 tags 點此展開
動態規劃
區間型dp
單調性dp
列舉長度+四邊形不等式優化
1 #include2 #include3 #include4 #include5 #include6#define lli long long int
7using
namespace
std;
8const
int maxn=5001;9
const
int maxn=0x7fffffff;10
void read(int &n)
1114
while(c>='
0'&&c<='9'
)15 x=(x<<1)+(x<<3)+c-48,c=getchar();
16 flag==1?n=-x:n=x;17}
18int
n;19
inta[maxn];
20int
sum[maxn];
21int
dp[maxn][maxn];
22int
mid[maxn][maxn];
23int
main()
2445}46
}47}48
49 printf("
%d",dp[1
][n]);
50return0;
51 }
codevs3002 石子歸併3
3002石子歸併3題目描述description 有n堆石子排成一列,每堆石子有乙個重量w i 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w i w i 1 問安排怎樣的合併順序,能夠使得總合併代價達到最小。輸入描述input description 第一行乙個整數n n 30...
codevs3002 石子歸併3
題目描述description 有n堆石子排成一列,每堆石子有乙個重量w i 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w i w i 1 問安排怎樣的合併順序,能夠使得總合併代價達到最小。輸入描述input description 第一行乙個整數n n 3000 第二行n個整...
1048 石子歸併
題目描述 description 有n堆石子排成一列,每堆石子有乙個重量w i 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w i w i 1 問安排怎樣的合併順序,能夠使得總合併代價達到最小。輸入描述 input description 第一行乙個整數n n 100 第二行n個...