|
本帖最后由 diggersun 于 2015-10-31 21:00 编辑
有1克 7克 5克3克9克的砝码各一个,有多少种方法可以称得出10克的重量?
这是一个最简单的背包问题,标准的做法是用一个二位数组F(x,y)表示用不超过编号为y的砝码凑出x的重量有多少方法,那么显然
f(0,y)=1 y=(0..5) 不管用多少砝码,称出0克的重量都有一种方法,这好像不用解释。
f(x,y)=f(x,y-1) 或者f(x-a(y),y-1)+f(x,y-1) f(x,y-1)的意思是不用这个编号为y的砝码,f(x-a(y),y-1)的意思是说用这个编号为y的砝码,那么有个约束条件 x>=a(i)
更通俗的理解是说若不用编号为y的砝码,相当于用前面y-1的砝码凑出重量x,若用编号为y的砝码,就是前面y-1个砝码凑出重量x-a(y);
程序我写了两个,一个使用二位数字F(x,y)进行很直观的递推。
第二种方法就用了一个一维数组 g(x),从后面往前推,类似杨辉三角的做法。
|
|