文章
21
粉丝
0
获赞
4
访问
493
#include <iostream>
#include <vector>
#include <cmath>
#include <climits>
using namespace std;
vector<int> num;
vector<vector<long long>> memo;
long long dfs(int left, int right) {
if (left >= right - 1)
return 0;
long long &res = memo[left][right];
if (res != LLONG_MAX)
return res;
// 对下标 1 到 n-1
for (int i = left + 1; i < right; i++) {
long long sum = num[left] * num[i] * num[right];
sum += dfs(left, i) + dfs(i, right);
res = min(res, sum);
}
return res;
};
int main() {
int n = 0;
while(cin >> n) {
num.resize(n + 1, 0);
for (int i = 0; i < n; i++) {
cin >> num[i] >> num[i + 1];
}
memo.clear();
memo.resize(n + 1, vector<long long>(n + 1, LLONG_MAX));
//-------------------------------------------------
long long ans = 0;
ans = dfs(0, n);
cout << ans << endl;
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发