题目:
设有 1g、2g、3g、5g、10g、20g 的砝码各若干枚(其总重≤1000),可以表示成多少种重量?
思路:
1.整体思路:
每加入一个砝码,可以额外表示的重量 取决于 现有的砝码可以表示的重量。且每一类砝码的数量有限。
2.具体思路:
(1)划分子问题
“使用前n个砝码可以表示出多少种重量”的子问题是,“使用前n-1个砝码可以表示多少种重量”,“”使用前n-2个砝码可以表示多少种重量”......
(2)状态表式
dp[i][j]表示用前i个砝码是否可以称出重量j。例如:dp[5][2]=1表示用前5个砝码可以称出重量2。
(3)状态转移
遍历1-max(可称出的所以重量),对于dp[i][j]=1的,对dp[i-1][j]也标记上,同时标记dp[i][j+fm[i]]。
AT:这道题的砝码只能放在称的一边,也就是说重量仅仅可以累加。
(4)确定边界
初始状态:dp[0][i]=0;0个砝码称不出任何重量。
最终状态:i从1-max遍历,统计dp[js][i]=1的个数
代码展示: