teacher_code_c/矩阵取数高精.cpp

142 lines
3.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//#include <iostream>
//#include <vector>
//#include <string>
//#include <algorithm>
//
//using namespace std;
//
//vector<vector<string>> dp; // ¼ÇÒ仯Êý×é
//
//
//string highPrecisionAdd(const string& s1, const string& s2) {
// int la = s1.length();
// int lb = s2.length();
// int lc = max(la, lb);
// vector<int> a(lc + 1, 0); // +1 to handle carry over
// vector<int> b(lc + 1, 0);
// vector<int> c(lc + 1, 0);
//
// for (int i = 0; i < la; i++) {
// a[i] = s1[la - i - 1] - '0'; // reverse order
// }
// for (int i = 0; i < lb; i++) {
// b[i] = s2[lb - i - 1] - '0'; // reverse order
// }
//
// for (int i = 0; i < lc; i++) {
// c[i] += a[i] + b[i];
// if (c[i] >= 10) {
// c[i + 1] += c[i] / 10;
// c[i] %= 10;
// }
// }
//
// // handle last carry
// if (c[lc] > 0) lc++;
//
// string result;
// bool leadingZero = true;
// for (int i = lc - 1; i >= 0; i--) {
// if (leadingZero && c[i] == 0) continue;
// leadingZero = false;
// result.push_back(c[i] + '0');
// }
//
// return result.empty() ? "0" : result;
//}
//
//string highPrecisionMultiply(const string& s1, const string& s2) {
// int la = s1.length();
// int lb = s2.length();
// vector<int> a(la, 0);
// vector<int> b(lb, 0);
// vector<int> c(la + lb, 0);
//
// for (int i = 0; i < la; i++) {
// a[la - i - 1] = s1[i] - '0'; // Reverse order
// }
// for (int i = 0; i < lb; i++) {
// b[lb - i - 1] = s2[i] - '0'; // Reverse order
// }
//
// for (int i = 0; i < la; i++) {
// for (int j = 0; j < lb; j++) {
// c[i + j] += a[i] * b[j];
// }
// }
//
// // Handle carry
// for (int i = 0; i < la + lb; i++) {
// if (c[i] >= 10) {
// c[i + 1] += c[i] / 10;
// c[i] %= 10;
// }
// }
//
// // Remove leading zeros
// int lc = la + lb;
// while (lc > 1 && c[lc - 1] == 0) lc--;
//
// string result;
// for (int i = lc - 1; i >= 0; i--) {
// result.push_back(c[i] + '0');
// }
//
// return result.empty() ? "0" : result;
//}
//
//
//// ¼ÆËã2µÄpower´Î·½µÄ¸ß¾«¶Èº¯Êý
//string powerOfTwo(int power) {
// string result = "1";
// string two = "2";
// for (int i = 0; i < power; ++i) {
// result = highPrecisionMultiply(result, two);
// }
// return result;
//}
//
//string findMaxRecursive(const vector<string>& b, int left, int right, int power) {
// if (left > right) {
// return "0";
// }
// if (left == right) {
// return highPrecisionMultiply(b[left], powerOfTwo(power));
// }
// if (dp[left][right] != "-1") {
// return dp[left][right];
// }
//
// string maxHead = highPrecisionAdd(findMaxRecursive(b, left + 1, right, power + 1), highPrecisionMultiply(b[left], powerOfTwo(power)));
// string maxTail = highPrecisionAdd(findMaxRecursive(b, left, right - 1, power + 1), highPrecisionMultiply(b[right], powerOfTwo(power)));
// dp[left][right] = (maxHead > maxTail) ? maxHead : maxTail;
// cout << "" << dp[left][right] << endl;
// return dp[left][right];
//}
//
//string solve(const vector<vector<string>>& matrix) {
// string totalMaxScore = "0";
// for (const auto& row : matrix) {
// int rowSize = row.size();
// dp = vector<vector<string>>(rowSize, vector<string>(rowSize, "-1"));
// totalMaxScore = highPrecisionAdd(totalMaxScore, findMaxRecursive(row, 0, rowSize - 1, 1));
// }
// return totalMaxScore;
//}
//
//int main() {
// int n, m;
// cin >> n >> m;
// vector<vector<string>> a(n, vector<string>(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;
//}