一、题目描述
MELON有一堆精美的雨花石(数量为n,重量各异),准备送给S和W。MELON希望送给俩人的雨花石重量一致,请你设计一个程序,帮MELON确认是否能将雨花石平均分配。
二、输入描述
第1行输入为雨花石个数: n,0<n<31。
第2行输入为空格分割的各雨化石重量: m[0] m[1] … m[n- 1], 0< m[k] < 1001
不需要考虑异常输入的情况。
三、输出描述
如果可以均分,从当前雨花石中最少拿出几块,可以使两堆的重量相等;如果不能均分,则输出-1。
四、动态规划
看到题目,我的第一反应是采用动态规划求解,目标值是雨花石重量总和的一半,从当前雨花石中最少拿出几块,满足两人的雨花石均分。
先区分一下动态规划与分治方法,都是将原问题拆分成若干个子问题,分别求解,再组合子问题的结果选出最优解。
分治方法将问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。
动态规划应用与子问题重叠的情况,即不同的子问题具有公共的子子问题(子问题的求解是递归进行的,将其划分为更小的子子问题