实在找不出bug来了啊QAQ
WA on #5, 6, 7, 9, 10
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 25;
int n,s[N],sum[N],j,f[N][N],deep;
int to[N][N];//区间[i,j],在l后面放+号
vector <int> e[N];
void dfs(int a,int b,int d) {//区间[a,b],d为深度
if(a == b) {//到底了
cout << s[a];
return;
}
deep = max(deep,d);//最大深度
e[d].push_back(sum[b] - sum[a - 1]);//存到深度为d的数组里
cout << '(';
int l = to[a][b];
dfs(a,l,d + 1);
cout << '+';
dfs(l + 1,b,d + 1);
cout << ')';
return;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n;
for(int i = 1;i <= n;i ++) {
cin >> s[i];
sum[i] = sum[i - 1] + s[i];
}
// for(int i = 1;i <= n;i ++) f[i][i] = 0;
for(int k = 1;k < n;k ++)
for(int i = 1;i <= n - k;i ++) {
j = i + k;
f[i][j] = LONG_LONG_MAX;
for(int l = i;l < j;l ++) {
if(f[i][l] + f[l + 1][j] + sum[j] - sum[i - 1] < f[i][j]) {
f[i][j] = f[i][l] + f[l + 1][j] + sum[j] - sum[i - 1];
to[i][j] = l;
}
}
}
dfs(1,n,1);
cout << '\n' << f[1][n] << '\n';
for(int i = deep;i;i --)//深度从大到小输出
for(int j = 0;j < e[i].size();j ++) cout << e[i][j] << ' ';
return 0;
}