计算机等级考试C语言程序设计例解(05)

文章作者 100test 发表时间 2007:03:10 17:19:13
来源 100Test.Com百考试题网


05. 从n个不同价值、不同重量的物品中选取一部分,在不超过限定的总重量的前提下,使该部分的价值最大。这里假定的总重量不超过n个物品的总重量总和,且没有一样物品的重量超过限定的总重量。
解:
这个问题是求最佳解的典型例子。为找最佳解,需生成所有可能的解。在生成这些解的同时,保留一个指定意义下的当前最佳解,当发现一个更好的解时,就把这个解改为当前最佳解,并保留之。
现给出一组n个物品中找出满足约束条件的最佳解的通例。为便于构造算法,采用递归方法。构成可接受解的所有选择是通过依次考察组中的各个物品的结果,对每个物品的考察均有两种可能:或所考察的物品被包括在当前选择中,或所考察的物品不被包括在当前选择中。递归函数是描述指定物品被包括或不被包括在当前选择中的计算过程,只要指定物品被包括后重量满足约束条件,该物品被包括是应该被考虑的;仅当一个物品如不被包括也可能达到比当前最佳解所达到的总价值大时,为满足重量的限制,不把该物品包含在当前选择中也是应该被考虑的。为此,递归函数设有三个参数:指定的物品、当前选择已达到的总重量和可能达到的总价值。下面的递归算法就是考察某个物品在当前选择中是否被包括的计算过程描述。
算法---物品i在当前选择中被包括与否的递归算法
try(物品i,当前选择已达到的总重量tw,可能达到的总价值tv)
{
/*考察当前选择包含物品i的合理性*/
if(包含物品i是可接受的)
{
将物品i包括在当前解中;
if(i else
调整当前最佳解;
将物品i从当前解中消去;
}
/*考察当前选择不包含物品i的合理性*/
if(i else
调整当前最佳解;
}
对当前选择而言,“包含物品i是可接受的”准则是它被包括后,有可能达到的总价值也不小于当前最佳解所达到的价值,因为如果小于的话,继续考察下去也不会产生更好的解。



相关文章


湖南:2005年上半年计算机等级考试成绩查询
专家:计算机等级考试应如何备考
计算机等级考试C语言程序设计例解(04)
计算机等级考试C语言程序设计例解(05)
计算机等级考试二级VB问题和技巧解答
江苏:2005年徐州市计算机等级考试成绩查询热线已开通
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛