#include <iostream>
#include <algorithm>/*题目描述
子集和问题的一个实例为〈S,t〉。其中,S={ 1 x , 2 x ,…, n x }是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得s1中的各元素之和等于c。
输入
第一行有2个正整数n和c,n表示S的大小,c是子集子集和的目标值。接下来的1行中,有n个正整数,表示集合S中的元素。
输出
输出子集和问题的解,非下标,同时在n个数为升序的前提下,所出的子集顺序是唯一的。并输出共有几种组合,如果无解,则输出0
注意,每个数字之间空2个空格,每行最后的数字也要空两个空格
样例输入
10  60
30 46 86 5 11 66 84 49 69 55
样例输出
5  55
11  49
2
*/
using namespace std;
const int N = 1e5 + 10;
int w[N], vis[N];
int n, M;
int ans;void SumOfSet(int s, int k) {// s为sum,前几个数的和if (k >= n) return;vis[k] = 1;if (s + w[k] == M) {for (int i = 0; i <= k; i++) {if (vis[i]) cout << w[i] << "  ";}cout << endl;ans++;}else if (s + w[k] <= M) {SumOfSet(s + w[k], k + 1);}// k在退出上面的递归后,k已经加了1,之后和后面的数继续递归if (s + w[k + 1] <= M) {vis[k] = 0;SumOfSet(s, k + 1);}
}int main() {// n:几个数// M:和数cin >> n >> M;for (int i = 0; i < n; i++) cin >> w[i];sort(w, w + n);SumOfSet(0, 0);cout << ans << endl;return 0;
}

算法分析-子集和数,回溯法相关推荐

  1. 算法分析与设计——回溯法实验报告

       算法导论  课程设计 成 绩 题    目:    回 溯 法 学院班级:        1613013         学    号:      16130130216       姓     ...

  2. 算法分析五:回溯法与分⽀限界法

    一.回溯法 1. 基本思想与解题步骤 基本思想: 把问题的解空间转化成了图或者树的结构表⽰,然后使⽤深度优先搜索策略进⾏遍历,遍历的过程中记录和寻找所有可⾏解或者最优解. 解题步骤: 针对所给问题,定 ...

  3. 78. 子集022(回溯法)

    一:题目 给你一个整数数组 nums ,数组中的元素 互不相同 .返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.你可以按 任意顺序 返回解集. 示例 1: 输入:nums = [1, ...

  4. 图的m着色问题(子集树回溯法)

    解空间:子集树 题目比较容易,直接附代码 代码 #include <iostream> using namespace std; int n; //图的顶点数 int x[100]; // ...

  5. 最大团问题(子集树回溯法)

    解空间:子集树 可行性约束函数:顶点t到已经选入顶点集中每一个顶点之间都有边 限界函数:有足够多的可选择的顶点使得算法有可能在右子树中找到更大的团(即cn+(n-t)>bestn) 复杂度分析: ...

  6. leetcode 698. Partition to K Equal Sum Subsets | 698. 划分为k个相等的子集(回溯法)

    题目 https://leetcode.com/problems/partition-to-k-equal-sum-subsets/ 题解 一上来以为是 dp(想到了左神讲的,将一个数组分成两个尽可能 ...

  7. 算法设计与分析第5章 回溯法(二)【回溯法应用】

    第5章 回溯法 5.2 应用范例 1.0-1背包问题 有n件物品和一个容量为c的背包.第i件物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和 ...

  8. 回溯法之递归回溯和迭代回溯

      回溯法有通用解题法之称,它可以系统的搜索一个问题的所有解或者任意解.它在问题的解空间树中,按深度优先策略从根节点出发搜索解空间树,算法搜索至解空间树的任意一个结点时,先判断该节点如(子树)是否包含 ...

  9. 回溯法实例详解(转)

    概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径. 回溯法是一种选优搜索法,按选优条件向前 ...

最新文章

  1. 企业网络推广——企业网络推广专员浅析网站关键词优化要注意哪些问题
  2. 第四周作业 wcPro
  3. linux ls什么意思,linux – 你如何确定bash ls的颜色是什么意思?
  4. Python+selenium 自动化-基本环境搭建,调用selenium库访问百度查询天气实例演示
  5. linux下SVN配置笔记(转)
  6. 波音737-800座位图哪个好_澳媒一张图揭秘,飞机选座秘诀!经济舱最舒适的位置在这儿...
  7. 你知道void和Void的区别吗
  8. 函数使用了堆栈的字节超过_在C语言中如何访问堆栈?
  9. 单链表的基本操作-查找
  10. mysql 查询排序位置_MySQL-基础查询与排序
  11. React Native 0.20官方入门教程
  12. python 自动化发送邮件_干货 | 解放双手,用Python实现自动发送邮件
  13. 高效记忆/形象记忆(10)110数字编码表 41-50
  14. 电脑缺少网卡驱动不能上网
  15. java开发mdm平台_Apple iOS MDM开发流程
  16. java定义方法判断字符串是否对称- 例如:“abcba“、“上海自来水来自海上“均为对称字符串。
  17. 2019年6月28日 星期五 今日计划
  18. 面试系列-2 我终于弄清楚了redis数据结构之string应用场景
  19. Week8 CSP模拟 T2 HRZ学英语
  20. 应用安全系列之二十九:密码管理

热门文章

  1. 华为交换机端口及业务的常用查询命令
  2. 无人驾驶感知篇之目标跟踪(十八)
  3. Nginx+Keepalived高可用集群应用实践
  4. 自动化设备数据采集系统如何实现
  5. CAD延伸功能如何使用?CAD延伸应用实例
  6. 从《从小工到专家》的“道”到大厂的“法术器”-哲学篇
  7. 建筑室内设计与计算机应用,建筑室内设计与室内艺术设计与艺术设计的区别?...
  8. Telnet,Mstsc,SSH,FTP之间的比较和区别
  9. 使用python进行收据搜集示例之different_format_data_processing
  10. 电子书厂商集体炮轰盛大 阵营模式分歧初现