题目:
输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,
使其和等于m ,要求将其中所有的可能组合列出来.
思路:在每一次递归中,考虑是与否将当前元素添加到数列中去,知道和达到某一值为止。
代码实现:
view plaincopy to clipboardprint?
#include<iostream>
#include<deque>
using namespace std;
void findNums(int n,int leftSum,deque<int>& deq)
{
if(n<0||leftSum<0)return; //已经遍历完数列,返回
if(leftSum>0)
{
deq.push_front(n); //将n加入数列或者不加入
findNums(n-1,leftSum-n,deq);
deq.pop_front();
findNums(n-1,leftSum,deq);
}
else { //当前数列综合已经达到要求,则输出
deque<int>::iterator i=deq.begin();
for(;i!=deq.end();++i)
{
cout<<*i<<" ";
}
cout<<endl;
}
}
int main()
{
deque<int> myDeq;
findNums(10,35,myDeq);
return 0;
}
同类题目:
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。
思路:对于这道题只要增加一个数组的记录就行了,其他一样。
同步博客:http://blog.csdn.net/moxiaomomo/archive/2011/05/24/6441831.aspx
分享到:
相关推荐
问题可以分为0-1背包、完全背包和多重背包三种类型,每种类型有不同的解题策略。 1. 0-1背包:每种物品只能选择0个或1个放入背包。 2. 完全背包:每种物品可以无限次放入背包,只要不超过背包容量。 3. 多重背包:...
它适用于某些特定的问题类型,在解决这些问题时,能够有效地减少计算的时间复杂度。但需要注意的是,并非所有问题都适合使用贪心算法求解,只有满足贪心选择性质和最优子结构性质的问题才可采用贪心算法。 #### 二...
除了求最大价值,背包问题还可以扩展到其他类型的问法,例如要求输出最优方案,或者计算方案总数、次优解、第K优解等。这些变种问题需要在求解时加入额外的逻辑来处理。 在《背包问题九讲》中,崔添翼(Tianyi Cui...
9. 背包问题问法的变化:作者可能会讨论背包问题的不同变体以及如何将基本的背包问题的思想应用到其它类型的问题中。这种变化可能体现在不同的约束条件下,也可能涉及到不同的优化目标。 附录中提及的内容为:USACO...
根据不同的目标和约束条件,背包问题可以分为多种类型。 **动态规划解法** 解决背包问题最常用的方法是动态规划。动态规划是一种通过构建子问题来解决复杂问题的方法,它将原问题分解为相互重叠的子问题,然后通过...
在实际应用中,可以根据问题的具体需求调整算法参数,如禁忌长度、邻域操作类型等,以提高求解质量和效率。禁忌搜索算法的优势在于其灵活性和适应性,可以应用于多种优化问题,而不仅仅是背包问题。
贪心算法是一种优化策略,它在每...在背包问题中,贪心算法对于某些特定类型的问题(如完全背包、非递减价值密度的物品)能得到最优解,但对于一般部分背包问题,可能需要结合动态规划等更强大的工具来确保全局最优。
分组的背包问题是一种题目类型,也是一个有用的模型。解决方法是使用动态规划,定义状态 f[i][v],表示前 i 件物品恰放入一个容量为 v 的背包可以获得的最大价值。状态转移方程是 f[i][v]=max{f[i-1][v],f[i-1][v-c...
通过掌握这些不同类型问题的解决方法和优化策略,我们不仅能够提升解决实际问题的能力,也能够在算法学习的道路上更进一步。背包问题的探索是一个永无止境的过程,每一种问题的出现都是对算法思维的一次挑战。只有...
通过对不同类型的背包问题的分析,我们可以看到动态规划的强大之处。无论是0/1背包、完全背包还是多重背包,通过合理地定义状态、构造状态转移方程并运用一些优化技巧,都可以有效地解决这些问题。掌握这些基本的...
这里有两种常见的背包问题类型:0-1背包问题和完全背包问题。0-1背包问题中,每个物品只能选择一次,而完全背包问题则允许选取任意次数。Matlab中的求解通常基于动态规划或者遗传算法。 描述中提到的“初始化背包...
本文将深入探讨背包问题的三种主要类型,并提供相应的解题策略和算法优化。 P01: 01 背包问题 在01背包问题中,我们有n个物品,每个物品有一个重量w[i]和一个价值v[i],以及一个容量为W的背包。目标是选择物品,...
01背包问题是最基础的背包问题类型,其名称来源于每个物品只能被取走0个或1个。给定一组物品,每个物品有自己的价值和重量,以及一个背包的最大容量,目标是求解在不超过背包容量的情况下,如何选择物品以使总价值...
本压缩包包含的资源详细讲解了背包问题的各种类型及其解法,包括"完全背包问题"的专项训练。 首先,"01背包"是最基础的背包问题形式,它的名字来源于每个物品只能被取0个或1个。假设我们有n件物品,每件物品有重量w...
背包问题按照问题的特性可以分为三种类型:0-1背包、完全背包和多重背包。本文将详细解析这三种背包问题的概念、解决方法以及在实际中的应用。 首先,我们来探讨0-1背包问题。这种问题设置了一个简单的前提:假设你...
01背包问题是背包问题中最基础也是最典型的类型之一,通过动态规划的方法可以有效地解决该问题。通过状态定义和状态转移方程的设计,结合适当的优化技巧,可以在保证正确性的前提下提高算法效率。 #### 二、完全...
但对于某些特殊类型的背包问题,如完全背包和0-1背包,贪心算法可以得到正确的结果。 在实际开发中,我们可能会遇到更复杂的情况,例如在SSH(Spring、Struts、Hibernate)框架下开发Web应用,或者涉及Android平台...
首先,我们要理解背包问题的类型。常见的背包问题有0-1背包问题(每个物品只能选择放或不放)、完全背包问题(每个物品可以无限数量放入背包)以及部分背包问题(每个物品可以放一定数量)。这里我们关注的是部分...
第一讲 01背包问题 这是最基本的背包问题,每个物品最多只能放一次。 第二讲 完全背包问题 第二个基本的背包问题模型,每种物品可以放无限多次。 第三讲 多重背包问题 每种物品有一个固定的次数上限。 第四讲 ...