关于动态程序中的子问题

时间:2019-11-28 18:29:21

标签: dynamic-programming

我对理解动态编程中的子问题有疑问。 例如:

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

Note: You can only move either down or right at any point in time.

动态程序的一般步骤是找到子问题。

因此,在这种情况下,dp函数为dp [m-1,n-1] = min(dp [m-2,n-1],dp [m-1] [n-2])+网格[m-1,n-1]。

我的问题是,当我们计算子问题dp [m-2,n-1]时,是否还会更改网格的形状,例如将网格缩小为(m-2)X(n-1)的大小?

基本上,如果我们缩小网格,则dp [m-2,n-1]将表示从给定网格([0] [0]到[m-2] [n-1]的最小路径总和( m-2)X(n-1),这将是dp [m-1] [n-1]

的子问题

或者,我们将网格的大小保持为[m-1] [n-1],然后在此网格中计算dp [m-2] [n-1]。

哪个是正确的子问题?

0 个答案:

没有答案