面相蓝桥杯初学者的提示
题目:
我看几乎所有的dp问题都很少去谈到dp数组怎么来的。转换方程在看了一些题目后感觉要好一点,但dp数组还是对于新手很不友好。
为什么dp数组要这样去设计?
首先我咨询了一下GPT-3.5得到下面的信息:
但我还是不太明白,怎么办?
我发现了一个问题中唯一不变的标识变量:砝码能够称重的重量,
以及影响这个表示变量的可变变量砝码的数量(一般设前i个比较多)。所以就不难理解为什么题解中会把重量这个不常用的变量用于dp数组。
你还没明白↓
Q1:想一想为什么不是dp[i][j] (代表左右的砝码数量)?
因为它不能唯一标识,dp[i][j] 和dp[j][i] 表示的情况一样的。
Q2:重复的究竟是什么?
我们要找的重复子问题是要可以从以及确定的状态中得到(推导出)新的,下一个状态的value。所以下一个状态会包含原有状态的。
当我们有:
3
1 2 3
这个数据时,{ 1, 2 ; #} 和 { 3 ; #}可以明显看见是总重量 重复了。(再加上题目结尾的暗示) 所以这个时候 总重量不是为value就是作为第二个变量了。 而我们的目的是找到种数,所以values可能是种数。故变量部分已经全了。(写的乱,见谅)