背包问题

今天北京电子科技学院的一网友问我一题,我面熟,说用dp,可发现自己对dp理解不是很好,现在拿出买的《ACM程序设计培训教程》看到背包问题有那么多解法,现在学习中……
    小明假期同爸爸一起去书店,他选中了n本书,每本书的单价分别为:P1、P2、P3……Pn。不巧的是,小明的爸爸只带了M元钱,为了让小明渡过一个愉快的假期,爸爸仍然同意买书,但有一个要求,要小明从n本书中选出若干本,使得单价相加所得的和同M元最接近。你能够帮助小明解决这个问题吗? 
要求:总钱数M、书本数n以及各本书的价格从键盘或文件输入;如果有多种组合,应全部列出。 现在还有一个要求:就是小明对每一种书都有一个兴趣度,从键盘输入,如果有相同的总价格,则考虑他们的总兴趣度,选择兴趣度大的输出。 
Code
用二进制位来标志买了哪本书,例如n=6,则需要2的0次方+……2的五次方,共6位,用k标示,m则为穷举的次数,一共有m种情况,用&就知道该本书在不在选择的范围之内,然后再选择最优的策略。我的代码最后interesting输出不出来,不知道怎么回事。这几天太忙,过两天再来看看。还有flag我想输出书的标号的,但是最后输出的是价格,想输出书的标号改一下就ok了。
原文地址:https://www.cnblogs.com/anderson0/p/1569434.html