我正在尝试解决以下问题:
将M*N的矩形纸张切割成正方形,使得:
- 沿着与纸张的一侧平行的线切割纸张.
- 切割纸张使得所得尺寸总是整数.
当纸张无法进一步切割时,该过程停止.
切割的纸张最小数量是多少都是正方形?
限制:1 <= N <= 100且1 <= M <= 100.
示例:设N = 1且M = 2,则答案为2,因为可以切割的最小平方数为2(纸张沿中间的较小边水平切割).
我的代码:
cin >> n >> m;
int N = min(n,m);
int M = max(n,m);
int ans = 0;
while (N != M) {
ans++;
int x = M - N;
int y = N;
M = max(x, y);
N = min(x, y);
}
if (N == M && M != 0)
ans++;
Run Code Online (Sandbox Code Playgroud)
但我没有弄到这种方法有什么问题,因为它给了我一个错误的答案.
给定是一个N*N网格.现在我们需要找到一个最大长度的好路径,其中好的路径定义如下:
现在给出这几个条件,我需要找出可以进行的最大路径的长度.另外,我需要计算最大长度的路径.
示例:设N = 3,我们有3*3矩阵如下:
0 3 2
3 0 1
2 1 0
Run Code Online (Sandbox Code Playgroud)
那么此处的最大良好路径长度为3,并且这种良好路径的计数为4.
0 3 2
3 0 1
2 1 0
0 3 2
3 0 1
2 1 0
0 3 2
3 0 1
2 1 0
0 3 2
3 0 1
2 1 0
给定具有N个元素的数组A,我想找到A的所有可能的连续子序列中的最小元素的总和.我知道如果N很小,我们可以寻找所有可能的子序列,但是当N高达10 ^ 5什么是找到这笔钱的最佳方法?
示例:设N = 3,A [1,2,3],然后ans为10作为可能的连续子序列{(1),(2),(3),(1,2),(1,2,3) ,(2,3)}所以最小元素的总和= 1 + 2 + 3 + 1 + 1 + 2 = 10