T4硬币值子集的子集组合情况,dp[i][j]表示子集和为i中能否表示出j,在for的时候要注意最外层循环物品1-n,里面循环和全都要从大到小倒着for,原因是我们不可以使用本层更新的信息来更新本层待更新的东西。举例,在第一件物品时,dp[10][5]显然是无法更新的,而如果我们从小到大for,会在更新了dp[5][0]以后更新dp[10][5],相当于将这件物品使用两次。
而这大概也就是01背包和完全背包循环顺序不同的原因,如果从大到小循环大的值不会因为本层小的值而更新,相当于只用一次,而从小到大则会先更新小的再用小的更新大的,相当于物品使用多次。
在dp中我们需要注意使用次数的限制或者转移条件的限制,来决定一个状态能否被“重复利用”,也就是以其为跳板,将能更新的全部更新。