553. 最优除法(区间dp & 数学)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了553. 最优除法(区间dp & 数学)相关的知识,希望对你有一定的参考价值。
553. 最优除法(区间dp & 数学)
1.区间dp
显然可以用区间dp,维护区间最大值和最小值然再维护两个对应的字符串。
时间复杂度: O ( n 3 ) O(n^3) O(n3)
struct Node
double maxVal, minVal;
string minStr, maxStr;
Node()
this->minVal = 10000.0;
this->maxVal = 0.0;
;
class Solution
public:
string optimalDivision(vector<int>& nums)
int n = nums.size();
vector<vector<Node>> dp(n, vector<Node>(n));
for (int i = 0; i < n; i++)
dp[i][i].minVal = nums[i];
dp[i][i].maxVal = nums[i];
dp[i][i].minStr = to_string(nums[i]);
dp[i][i].maxStr = to_string(nums[i]);
for (int i = 1; i < n; i++)
for (int j = 0; j + i < n; j++)
for (int k = j; k < j + i; k++)
if (dp[j][j + i].maxVal < dp[j][k].maxVal / dp[k + 1][j + i].minVal)
dp[j][j + i].maxVal = dp[j][k].maxVal / dp[k + 1][j + i].minVal;
if (k + 1 == j + i)
dp[j][j + i].maxStr = dp[j][k].maxStr + "/" + dp[k + 1][j + i].minStr;
else
dp[j][j + i].maxStr = dp[j][k].maxStr + "/(" + dp[k + 1][j + i].minStr + ")";
if (dp[j][j + i].minVal > dp[j][k].minVal / dp[k + 1][j + i].maxVal)
dp[j][j + i].minVal = dp[j][k].minVal / dp[k + 1][j + i].maxVal;
if (k + 1 == j + i)
dp[j][j + i].minStr = dp[j][k].minStr + "/" + dp[k + 1][j + i].maxStr;
else
dp[j][j + i].minStr = dp[j][k].minStr + "/(" + dp[k + 1][j + i].maxStr + ")";
return dp[0][n - 1].maxStr;
;
2.数学
因为 n u m > 1 num>1 num>1,显然分子最大是 n u m 0 num_0 num0
要求分母最小,显然全部除即可。
所以是 n u m 0 n u m 1 ÷ n u m 1 ⋯ ÷ n u m n − 1 \\dfracnum_0num_1\\div num1\\dots\\div num_n-1 num1÷num1⋯÷numn−1num0
时间复杂度: O ( n ) O(n) O(n)
class Solution
public:
string optimalDivision(vector<int>& nums)
int n = nums.size();
if (n == 1)
return to_string(nums[0]);
if (n == 2)
return to_string(nums[0]) + "/" + to_string(nums[1]);
string res = to_string(nums[0]) + "/(" + to_string(nums[1]);
for (int i = 2; i < n; i++)
res.append("/" + to_string(nums[i]));
res.append(")");
return res;
;
以上是关于553. 最优除法(区间dp & 数学)的主要内容,如果未能解决你的问题,请参考以下文章
ZOJ 3537 Cake (凸包 + 区间DP && 最优三角形剖分)
LeetCode 2016. 增量元素之间的最大差值 / 553. 最优除法 / 1601. 最多可达成的换楼请求数目(枚举+回溯)