diff --git a/1770.MaximumScorefromPerformingMultiplicationOperations/bottom_up.cpp b/1770.MaximumScorefromPerformingMultiplicationOperations/bottom_up.cpp new file mode 100644 index 0000000..6fa4e39 --- /dev/null +++ b/1770.MaximumScorefromPerformingMultiplicationOperations/bottom_up.cpp @@ -0,0 +1,19 @@ +class Solution { +public: + int maximumScore(vector& nums, vector& multipliers) { + vector> memo(multipliers.size() + 1, vector(multipliers.size() + 1)); + + for (int i = multipliers.size() - 1; i >= 0; i--) { + for (int left = i; left >= 0; left--) { + int mult = multipliers[i]; + int right = nums.size() - 1 - (i - left); + + memo[i][left] = max(mult * nums[left] + memo[i + 1][left + 1], + mult * nums[right] + memo[i + 1][left]); + } + } + + return memo[0][0]; + } +}; + diff --git a/1770.MaximumScorefromPerformingMultiplicationOperations/top_down.cpp b/1770.MaximumScorefromPerformingMultiplicationOperations/top_down.cpp new file mode 100644 index 0000000..d0f4307 --- /dev/null +++ b/1770.MaximumScorefromPerformingMultiplicationOperations/top_down.cpp @@ -0,0 +1,35 @@ +class Solution { +public: + int maximumScore(vector& nums, vector& multipliers) { + nums_g = nums; + multipliers_g = multipliers; + n_size = nums.size(); + m_size = multipliers.size(); + vector> init_memo(m_size, vector(m_size)); + memo = init_memo; + + return CalMax(0, 0); + } + +private: + vector> memo; + vector nums_g; + int n_size; + vector multipliers_g; + int m_size; + + int CalMax(int i, int left) { + if (i == m_size) { + return 0; + } + int mult = multipliers_g[i]; + int right = n_size - 1 - (i - left); + + if (memo[i][left] == 0) { + memo[i][left] = max(mult * nums_g[left] + CalMax(i + 1, left + 1), + mult * nums_g[right] + CalMax(i + 1, left)); + } + + return memo[i][left]; + } +};