题解
2025-07-05 11:04:07
发布于:浙江
9阅读
0回复
0点赞
代码如下:
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main() {
int n;
cin >> n;
vector<long long> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
vector<long long> prefix(n + 1, 0);
for (int i = 0; i < n; ++i) {
prefix[i + 1] = prefix[i] + a[i];
}
vector<vector<long long>> dp(n, vector<long long>(n, 0));
for (int len = 2; len <= n; ++len) {
for (int l = 0; l <= n - len; ++l) {
int r = l + len - 1;
dp[l][r] = LLONG_MAX;
for (int k = l; k < r; ++k) {
long long cost = dp[l][k] + dp[k + 1][r] + prefix[r + 1] - prefix[l];
if (cost < dp[l][r]) {
dp[l][r] = cost;
}
}
}
}
cout << dp[0][n - 1] << endl;
return 0;
}
这里空空如也
有帮助,赞一个