计算在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数组矩阵存储数字。
以可变分数作为输入。
取两个数组intarr[row][col][size]和boolcheck[row][col][size]。
函数matrix_score(intmatrix[row][col],introws,intcols,intsc)用于返回达到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