计算在C ++中的矩阵中达到给定分数的方法数量

给定一个包含非负数作为元素的方阵[] []。还给出了可变分数。目标是通过添加来自matrix [] []的元素来计算达到给定分数的方式,以使只有允许的动作是正确的动作和向下的动作。 

从matrix [0] [0]开始,只能移动,移动到matrix [0] [1](向右移动)或移动到matrix [1] [0](向下移动)并相加值以达到sum = score。

让我们通过示例来理解。

例如

输入  -matrix [row] [col] = {{1,1},{1,1}} score = 3

输出-在矩阵中达到给定分数的方法数量计数:2

说明-可以通过以下方式达到分数:

方法1:在索引(0,0)+(0,1)+(1,1)= 1 + 1 + 1 = 3处添加元素

方法2:在索引(0,0)+(1,0)+(1,1)= 1 + 1 + 1 = 3处添加元素

输入  -matrix [row] [col] = {{1,1,2},{2,1,1},{1,2,2}} score = 7

输出-在矩阵中达到给定分数的方法数量计数:2

说明-可以通过以下方式达到分数:

方法1:在索引(0,0)+(0,1)+(1,1)+(1,2)+(2,2)= 1 + 1 + 1 + 2 + 2 = 7处添加元素

方法2:在索引(0,0)+(0,1)+(1,1)+(2,1)+(2,2)= 1 + 1 + 1 + 2 + 2 = 7处添加元素

以下程序中使用的方法如下

在这种方法中,我们将使用动态编程来解决该问题。我们将使用两个数组arr [row] [col] [size]和check [row] [col] [size]。如果数组检查为true,则数组检查将标记matrix [] []的单元格。数组arr [] [] []用于存储从矩阵[0] [0]到达特定单元格的方式。递归地我们将计算出方法。

  • 以2D数组矩阵存储数字。

  • 以可变分数作为输入。

  • 取两个数组int arr [row] [col] [size]和bool check [row] [col] [size]。

  • 函数matrix_score(int matrix [row] [col],int rows,int cols,int sc)用于返回达到Matrix中给定分数的方法数量的计数。

  • 如果分数sc小于0,则返回0。(结束递归或输入错误的情况)

  • 如果行数或列数小于0,则返回0。(结束递归)。

  • 如果第一个单元格等于sc(输入分数),则返回1作为唯一方法。如果不是,则返回0。

  • 如果当前单元格已被访问,则以arr [rows] [cols] [sc]的形式返回该单元格处的路数。

  • 如果以上所有条件均不成立,则将当前单元格标记为已访问。使用check [rows] [cols] [sc] = true。

  • 计算temp_1 = matrix_score(矩阵,第1行,cols,sc-matrix [rows] [cols]) 

  • 计算temp_2 = matrix_score(矩阵,行,cols-1,sc-matrix [rows] [cols])

  • 将路数设置为arr [rows] [cols] [sc] = temp_1 + temp_2。

  • 最后返回arr [rows] [cols] [sc]。

示例

#include <iostream>

using namespace std;

#define row 2

#define col 2

#define size 30

int arr[row][col][size];

bool check[row][col][size];

int matrix_score(int matrix[row][col], int rows, int cols, int ways) {

   if (ways < 0) {

      return 0;

   }

   if (rows < 0 || cols < 0) {

      return 0;

   }

   if (rows == 0) {

      if (cols == 0) {

         if (ways == matrix[0][0]) {

            return 1;

         } else {

            return 0;

         }

      }

   }

   if (check[rows][cols][ways]) {

      return arr[rows][cols][ways];

   }

   check[rows][cols][ways] = true;

   int temp_1 = matrix_score(matrix, rows - 1, cols, ways - matrix[rows][cols]);

   int temp_2 = matrix_score(matrix, rows, cols - 1, ways - matrix[rows][cols]);

   arr[rows][cols][ways] = temp_1 + temp_2;

   return arr[rows][cols][ways];

}

int main() {

   int matrix[row][col] = {

      {

         1,

         1

      },

      {

         1,

         1

      }

   };

   int ways = 3;

   cout << "在矩阵中达到给定分数的方式计数为: " << matrix_score(matrix, row - 1, col - 1, ways);

   return 0;

}

如果我们运行上面的代码,它将生成以下输出-

输出结果

在矩阵中达到给定分数的方式计数为: 2

以上是 计算在C ++中的矩阵中达到给定分数的方法数量 的全部内容, 来源链接: utcz.com/z/329739.html

回到顶部