问题描述
问题描述:设有n件体积分别为w1、w2……wn的物品和一个能装载总体积为T的背包,要求从n件物品中挑选若干件物品,其总体积之和恰好装满背包。若能,则背包有解,否则无解;
求解方法:先将n件物品顺序排列,依次装入背包,每装入一件即检查当时背包物品体积是否超过T,若装入该物品后不超过背包容量T,则装入,否则弃之取下一个,直到装满背包为止。若在装入若干物品后背包未满,但又无其他物品可选时,说明已装入背包内的物品不合适,需从背包中取出最后装入的物品,继续在其他未装入的物品中挑选,如此重复知道装满背包(有解)或者无物品可选(无解);
输入输出样例:若T=10;W=(4,7,3,5,4,2)时,执行程序,输出结果为Wi=(4,4,2)。
设计思路
设计思路:设一维数组W[1:n]用来存放n件物品的体积,栈S[1:n]用来存放放入背包内的物品的序号,T为背包能容纳的体积,i为待选物品序号。每进栈一件物品,就从T中减去该物品的体积,若T-W[i]>=0,则该物品可选,若T-W[i]<0,则该物品不可选