经典 01 背包题
- 首先介绍一下 01 背包,即一种 DP 问题,以放置物品为模型,每个物品只能放一次。其区分于完全背包(每个物品可以放无限多次),以及多重背包(每个物品有一个固定次数上限)。题中给出了 NNN 个砝码及每个砝码的质量,要求我们求出可以称出质量的种数。由此想到转化为 01 背包。
- 本题作为 01 背包的模板题之一,其思想不难(前提是你掌握了 01 背包写法)。但是有几个坑点:
上过初一的人都知道左物右码,这个题出的很不科学。题中重点是天平两边都能放砝码,显然,由于天平两边放砝码的质量不一定相等,所以要在较轻一侧放一个一定质量的物体使其平衡。所以显然地,设物体质量为 mthingm_{thing}mthing,左盘砝码质量为 mlm_lml,右盘砝码质量为 mrm_rmr,则有:
{ mthing+ml=mr(ml≤mr)mthing+mr=ml(ml≥mr) \left\{ \begin{array}{c} m_{thing}+m_l=m_r (m_l\le m_r)\\ m_{thing}+m_r=m_l (m_l\ge m_r) \end{array} \right. { mthing+ml=mr(m