Dynamic 国王';三月

Dynamic 国王';三月,dynamic,dynamic-programming,Dynamic,Dynamic Programming,给你一个尺寸为nxn的棋盘。在棋盘右下角的正方形上有一个国王,上面标着s。国王需要到达左上角标有e的正方形。其余的正方形用整数p(标记一个点)或x标记一个障碍物。请注意,国王只能向上、向左和向上向左(对角)移动。找出国王可以收集的最大点数以及国王可以采取的路径数量 输入格式 输入的第一行由一个整数t组成。这是测试用例的数量。每个测试用例包含一个数字n,表示电路板的大小。然后是n行,每行包含n个空格分隔的标记 输出格式 对于每种情况,在单独的行中打印可以收集的最大点和可用路径数,以确保最大值,这两

给你一个尺寸为nxn的棋盘。在棋盘右下角的正方形上有一个国王,上面标着s。国王需要到达左上角标有e的正方形。其余的正方形用整数p(标记一个点)或x标记一个障碍物。请注意,国王只能向上、向左和向上向左(对角)移动。找出国王可以收集的最大点数以及国王可以采取的路径数量

输入格式 输入的第一行由一个整数t组成。这是测试用例的数量。每个测试用例包含一个数字n,表示电路板的大小。然后是n行,每行包含n个空格分隔的标记

输出格式 对于每种情况,在单独的行中打印可以收集的最大点和可用路径数,以确保最大值,这两个值用空格分隔。如果无法从s访问e,则打印0

样本输入

3
3
e 2 3
2 x 2
1 2 s
3
e 1 2
1 x 1
2 1 s
3
e 1 1
x x x
1 1 s
样本输出

7 1
4 2
0 0
约束条件
1我认为这个问题可以用动态编程来解决。我们可以使用
dp[i,j]
计算从右下角到
i,j
位置可以获得的最佳点数。对于有效的
i,j
,我们可以根据
dp[i+1,j]
dp[i,j+1]
dp[i+1,j+1]
计算
i,j
,如果这是有效的位置(不在矩阵之外或标记为
x
),并将在
i,j
单元格中获得的点相加。您应该从右下角到左上角,逐行计算,并从最后一列开始计算

对于方法数,您可以添加一个新矩阵
ways
,并使用它存储方法数

这是一个示例代码,展示了这个想法:

dp[i,j]=dp[i+1,j+1]+板[i,j]
方法[i,j]=方法[i+1,j+1]
如果dp[i,j]
这是假设所有位置都有效

最终结果存储在
dp[0,0]
ways[0,0]
简要概述中: 这个问题可以通过递归方法调用来解决,从n*n开始直到0*0,这是国王的目的地


有关此问题的详细解释和解决方案,请查看此处->

您有问题吗?这不是一个代码编写服务。我只是想要一个逻辑