1,2,5,10四个基数任意次数组合相加得到一个数N,求所有可能组合
2011-09-19 20:58
1256 查看
#include <iostream> #include <vector> using namespace std; vector<int> vec; const int a[4] = {1, 2, 5, 10}; //1,2,5,10四个基数任意次数组合相加得到一个数N,求所有可能组合。 //回溯,背包问题 void backup(int N)//总共k个数,和为N { if (N == 0) { vector<int>::iterator it = vec.begin(); for (; it != vec.end(); ++it) cout<< *it <<" "; cout<<endl; return; } if (N < 0) return; for (int i = 0; i < 4; ++i) { if (vec.empty() || a[i] >= vec.back())// 非降序,为了去掉重复的组合 { vec.push_back(a[i]); backup(N-a[i]); vec.pop_back(); } } } int main(int argc, char* argv[]) { backup(20); return 0; }
相关文章推荐
- 四个基数任意次数组合相加得到一个数N,求所有可能组合
- 回溯法应用:1,2,5,10四个数任意次数相加得到一个数N
- 一个有序正整数集S,若要保证整数集中所有的数通过组合(相加)可以表示1~N中任意一个正整数
- 程序员面试题精选(44):整数分割(即求一个数N由小于等于N的数相加所得的所有组合)
- 【每天算法2】:用java语言实现,一个组数:122345这6个数,打印出它所有可能的组合;要求4不能在第3位,3和5不能相连。
- 给定n个数{1,2,3,...,n},从中选择任意两两不同的k个数,输出所有可能的组合
- 求从n个数组任意选取一个元素的所有组合
- 编写一个算法输出n个布尔量的所有可能的组合
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应
- 给出一个数组 求任意个数的数相加的和等于给定数 输出所有满足条件的数
- 给定一个数组,n个数,打印所有可能的r位数的组合。例如{1,2,3,4}n=4,r=2.输出{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}
- 数A去掉一个数字后得到B,给出A与B的和N求所有可能的数A
- 比如你给它任意一个正整数,它可以按照一定的运算规则, 计算出得到1的最少操作次数。
- 求从n个数组任意选取一个元素的所有组合
- 有一个数列(1)循环输出数列的值(2)求数列中所有数值的和(3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含次数
- 题目描述:给定一个字符串,求出其所有可能的字符组合. 比如:abc 其所有组合是:a,b,c,ab,ac,bc,abc
- 求从n个数组任意选取一个元素的所有组合
- 算法题:求从n个数组任意选取一个元素的所有组合
- 计算一个数等于其它数相加的所有可能 如: 5 =1+4 ,1+3+1,2+3,2+2+1,1+1+1+1+1,1+1+1+2
- 给定一个物理地址求所有可能的段地址与有效地址组合