区间DP
石子合并
int a[510], sum[510];
int f[510][510];
int solve(int l, int r) {
if (l == r) return 0;
if (f[l][r]) return f[l][r];
int ans = INF;
for (int i = l; i < r; i++)
ans = min(ans, solve(l, i) + solve(i + 1, r));
f[l][r] = ans + sum[r] - sum[l - 1];
return f[l][r];
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
sum[i] = a[i] + sum[i - 1];
}
int ans = solve(1, n);
cout << ans << endl;
return 0;
}括号序列
石子合并2
序列删除
Last updated