求助,动态规划超时了
查看原帖
求助,动态规划超时了
287534
MingA楼主2021/4/4 13:54

我知道这题要用高精度,但现在不是高精度的问题。 为什么我写的动规就超时了啊? 我也看了下题解,方程应该是没啥问题的, 跟dalao们写的应该是一样的, 递归结构不就是MAX(第一个元素+后面的递归 、 最后一个元素+前面的递归)吗? 为什么别人就没超时我超时了呢? 求大佬指出问题,谢谢!

#include<iostream>
using namespace std;
long long Mxuan(int* T, int M, int JS = 1) {
	long long DP1 = 0, DP2 = 0;//动态值
	if (M == 1) {
		return T[0] * pow(2, JS);
	}
	else {
		//选前值
		DP1 += T[0] * pow(2, JS);
		DP1 += Mxuan(T + 1, M - 1, JS + 1);
		//选后值
		DP2 += T[M - 1] * pow(2, JS);
		DP2 += Mxuan(T, M - 1, JS + 1);
		return DP1 > DP2 ? DP1 : DP2;
	}
}
int main() {
	int i, n, k, ** T, N, M;
	long long S = 0;
	cout << "请输入矩阵行、列数:\n";
	cin >> N >> M;
	T = new int* [N];
	for (n = 0; n < N; n += 1)
		T[n] = new int[M];
	cout << "请输入矩阵:\n";
	for (n = 0; n < N; n += 1)
		for (i = 0; i < M; i += 1)
			cin >> T[n][i];
	cout << "最大得分为:\n";
	for (n = 0; n < N; n += 1)
		S += Mxuan(T[n], M);
	cout << S << endl;
}
2021/4/4 13:54
加载中...