`

【100题】第二十一题(中兴面试题)

 
阅读更多

一,题目:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。

二,解释:比如输入m=4 n=4 则输出为:4

1+3 而2+2不正确,因为重复输出数字了

中心思想:1)如果1+2+3+……+n<m 则不存在这个数

2)如果m<n 则应该让n=m //因为m--->n之间的数都已经大于m了 没必要再计算了

3)如果m=n 输出n

4)如果m>n 递归循环

源码采用原型:0-1背包问题

参考博客:http://blog.csdn.net/tianshuai11/article/details/7025464

三,源码:(类似源码五)

#include<list>


四,源码(java方法)

五,源码(容易理解)

【0-1背包公式】opt[i][v] = max(opt[i-1][v] , opt[i-1][v-c[i]] + w[i])
解释如下:
opt[i-1][v] 表示第i件物品不装入背包中,而opt[i-1][v-c[i]] + w[i] 表示第i件物品装入背包中。

对应之后:n为物品 m为背包容积,这里相当于求“所有可能的装满的装法”。忽略了价值的计算即没有真正计算出那种装法最佳



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics