文章

21

粉丝

0

获赞

4

访问

493

头像
乘法奥义 题解:
P5384 四川大学2025年机试题
发布于2026年3月27日 16:19
阅读数 8

#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;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发