计算在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