看完题后能否形成一个清晰思路的关键就在于能否根据题意的描述构建出一个恰当的模型,适合这道题目本身同时又能联系自己之前头脑库中的模型。而对于01背包这类模型来说,形成的关键思维就在想最后一个n,即用一种抽象的语言把最终的结果给描述出来。
01背包的例子就不举了,这里先给出一个简单的01背包变形的例子:
按照之前的逻辑,我们用抽象的语言描述这道题的结果就是:给定一个长度为n的数列,问从这n个数中获取某些的数的和,使这个和最大同时又不超过某个值k,问能取几个或者这个和是多少。话说到这里,就很容易和0-1背包一一对应起来了,这个k就是0-1中的最大背包容量,某些数的最大和就是0-1背包中所有物品的最大价值。不过0-1背包中的value和weight两个量在这道题目中缩成了num这一个变量。
下面给出两个例题,都是这样的思路。
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18818 Accepted Submission(s): 6584
原文:http://www.cnblogs.com/immortal-worm/p/5239492.html