teacher_code_c/矩阵取数记忆.cpp

62 lines
1.7 KiB
C++

//#include <iostream>
//#include <vector>
//#include <algorithm>
//
//using namespace std;
//
//int n, m;
//vector<vector<long long>> dp; // 记忆化数组
//
//// 计算 2^power
//long long powerOfTwo(int power) {
// long long result = 1;
// for (int i = 0; i < power; ++i) {
// result *= 2;
// }
// return result;
//}
//
//// 递归函数:选择向量的头或尾来查找最大值
//long long findMaxRecursive(const vector<int>& b, int left, int right, int power) {
// if (left > right) {
// return 0;
// }
// if (left == right) {
// return b[left] * powerOfTwo(power);
// }
// if (dp[left][right] != -1) { // 如果已经计算过,直接返回结果
// return dp[left][right];
// }
// long long maxHead = findMaxRecursive(b, left + 1, right, power + 1) + b[left] * powerOfTwo(power);
// long long maxTail = findMaxRecursive(b, left, right - 1, power + 1) + b[right] * powerOfTwo(power);
// dp[left][right] = max(maxHead, maxTail); // 记录计算结果
// return dp[left][right];
//}
//
//long long solve(const vector<vector<int>>& matrix) {
// long long totalMaxScore = 0;
// for (const auto& row : matrix) {
// int rowSize = row.size();
// // 动态调整 dp 的大小并初始化
// dp = vector<vector<long long>>(rowSize, vector<long long>(rowSize, -1));
// totalMaxScore += findMaxRecursive(row, 0, rowSize - 1, 1);
// }
// return totalMaxScore;
//}
//
//int main() {
// cin >> n >> m;
// vector<vector<int>> a(n, vector<int>(m));
//
// // 读取输入
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < m; j++) {
// cin >> a[i][j];
// }
// }
//
// cout << solve(a) << endl;
//
// return 0;
//}