石子合并:
#include <bits/stdc++.h>
using namespace std;
const int N = 310;
int f[N][N],s[N];
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n; cin >> n;
for(int i = 1; i <= n; i++){
cin >> s[i];
s[i] += s[i - 1];
}
// 枚举区间长度
for(int len = 2; len <= n; len ++){
//枚举左端点
for(int i = 1; i + len - 1 <= n; i++){
int j = i + len - 1;
f[i][j] = 1e8;
for(int k = i; k < j; k++)
f[i][j] = min(f[i][k] + f[k + 1][j] + s[j] - s[i - 1], f[i][j]);
}
}
cout << f[1][n];
return 0;
}