我对理解动态编程中的子问题有疑问。 例如:
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]。
哪个是正确的子问题?