题意:一个杠杆,中心有支点,两边有挂钩,挂钩位置由输入给定。有一些砝码,砝码重量由输入给定。一个挂钩下可以挂多个砝码,也可以什么都不挂,但每个砝码必须都用。问有多少种组合方式,可以使杠杆平衡。
做这题,切身体会到了 DP才是王道 这话的含义。
初看题目,穷举。看DISCUSS,原来是DP。
像这种组合方式很多,但状态空间却不大的,一般都可以交给DP。
DP[i][j]表示放置第i个物品后,总质量为j的可能组合的数量。
状态转移方程 DP[i+1][j]=sum{DP[i][j-weight[i]*hook[k]](1<=k<=C)}
初始化 DP[0][0]=1,最后输出 DP[G][0].
因为DP[i][j]中j可能为负数,在代码中给j加上一个偏移量base。