小编use*_*069的帖子

以最小平方数切割矩形

我正在尝试解决以下问题:

将M*N的矩形纸张切割成正方形,使得:

  1. 沿着与纸张的一侧平行的线切割纸张.
  2. 切割纸张使得所得尺寸总是整数.

当纸张无法进一步切割时,该过程停止.

切割的纸张最小数量是多少都是正方形?

限制: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)

但我没有弄到这种方法有什么问题,因为它给了我一个错误的答案.

c++ algorithm

16
推荐指数
3
解决办法
9369
查看次数

在网格中查找最佳长路径

给定是一个N*N网格.现在我们需要找到一个最大长度的好路径,其中好的路径定义如下:

  1. 好路径始终从标记为0的单元开始
  2. 我们只允许向左,向右,向上或向下移动
  3. 如果ith cell的值为A,则路径中下一个单元格的值必须为A + 1.

现在给出这几个条件,我需要找出可以进行的最大路径的长度.另外,我需要计算最大长度的路径.

示例:设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

c++ algorithm recursion dynamic-programming

6
推荐指数
1
解决办法
1609
查看次数

连续序列的总和

给定具有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

algorithm

5
推荐指数
2
解决办法
164
查看次数

标签 统计

algorithm ×3

c++ ×2

dynamic-programming ×1

recursion ×1