子集选取(动态规划)小明买书 C语言算法.pptVIP

  • 68
  • 0
  • 约2.07千字
  • 约 9页
  • 2016-08-21 发布于河南
  • 举报

子集选取(动态规划)小明买书 C语言算法.ppt

子集选取(动态规划)小明买书 C语言算法

子集选取问题 有一类算法,从集合A中选取任意子集a(子集内元素数限或不限),对a进行筛选操作,若a满足某条件则被认为是需要的集合,输出。 此类问题的关键是如何有效、快速、不遗漏的选取子集a。 下面来看道例题。 小明假期同爸爸一起去书店,他选中了六本书,每本书的单价分别为:3.1,1.7,2,5.3,0.9和7.2。 不巧的是,小明的爸爸只带了十几块钱,为了让小明过一个愉快的假期, 爸爸扔然同意买书,但提邮购一个要求,要小明从六本书中选出若干本, 使得单价相加所得的和同10最接近。 请找出同10最接近的书组合并输出。 我们很容易想到大概思路:把6本书的单价存入一个数组book[6]中,然后在数组中进行操作: 1.有规律的不重复的不遗漏的选取若干个数组元素,求和s并与10比较得出差d,保存这些数组元素,用“打擂法”来找出最小的d及其相应的数组元素。 2.输出d和相应数组元素。 问题是:如何将我们的思路具体实践呢? 操作1: ①求出最小d; ②对应书价(放在数组result[]中)。考虑到可能有i种组合使d最小(d必相等),所以还有保存组合数i,并把相应元素也放在result[]中。 操作2:用result[]、i来分组输出每组的单价,并输出d. 数据的表示与转化: 关键仍然是有效、快速、不遗漏的选取子集。选取的书数目1~6均可。 1.同一本书或取或不取两种,故采用2进制表示法,

文档评论(0)

1亿VIP精品文档

相关文档