我知道这题要用高精度,但现在不是高精度的问题。 为什么我写的动规就超时了啊? 我也看了下题解,方程应该是没啥问题的, 跟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;
}