问题描述

从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T。每个元素限选一次,不能一个都不选。

输入格式

第一行一个正整数n,表示整数集内元素的个数。
第二行n个整数,用空格隔开。
第三行一个整数T,表示要达到的和。

输出格式

输出有若干行,每行输出一组解,即所选取的数字,按照输入中的顺序排列。
若有多组解,优先输出不包含第n个整数的;若都包含或都不包含,优先输出不包含第n-1个整数的,依次类推。
最后一行输出总方案数。

样例输入

5
-7 -3 -2 5 9
0

样例输出

-3 -2 5
-7 -2 9
2

数据规模和约定

1<=n<=22
T<=maxlongint
集合中任意元素的和都不超过long的范围

【分析】一道深搜的题目,难点在于输出多组解的顺序,为了方便解决输出多组解的顺序的这个问题,需要从后想前搜索,然后把结果逆序输出就可以得到结果~

如例子,从9开始搜索,得到9 -2 -7,然后把它的顺序反一下输出就得到了一组解,而且这个解在另一组解5 -2 -3的前面先得到,所以最后把所有的解按逆序输出就得到了结果~

import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Stack;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();isVisited = new boolean[n];nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = sc.nextInt();}t = sc.nextInt();sc.close();dfs(n - 1, 0, new LinkedList<Integer>(), true);while (!out.isEmpty()) {System.out.println(out.pop());}System.out.println(cnt);}private static int cnt = 0, n = 0, t = 0;private static boolean[] isVisited;private static int[] nums;private static Stack<String> out = new Stack<>();private static void dfs(int pos, int tempT, LinkedList<Integer> selectedNums, boolean isNone) {for (int i = pos; i >= 0; i--) {if (!isVisited[i]) {isVisited[i] = true;selectedNums.push(nums[i]);dfs(i - 1, tempT + nums[i], selectedNums, false);selectedNums.pop();isVisited[i] = false;}}if (tempT == t && !isNone) {out.push(toReulstString(selectedNums.iterator()));cnt++;}}private static String toReulstString(Iterator<Integer> it) {StringBuilder result = new StringBuilder();while (it.hasNext()) {result.append(it.next() + " ");}return result.toString();}
}

蓝桥杯 ALGO-115 算法训练 和为T Java版相关推荐

  1. 蓝桥杯练习系统算法训练习题加答案java版本

    附上百度文库的链接:http://wenku.baidu.com/view/afb78d36b42acfc789eb172ded630b1c59ee9bf7 转载于:https://www.cnblo ...

  2. 蓝桥杯:试题 算法训练 Remember the A La Mode

    蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...

  3. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)

    时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...

  4. 矩阵乘法 算法训练 试题_蓝桥杯习题集_ 算法训练 矩阵乘法

    原文: 算法训练 矩阵乘法 时间限制:1.0s   内存限制:512.0MB 问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s, ...

  5. 蓝桥杯简单题之十六进制转八进制(JAVA版)

    首先对等待程序猿成长之路系列的小伙伴们说声抱歉,春节来临,可能要拖更一段时间,但是草稿已经在写,发布将会于春节后进行发布 春节第一天闲着无聊打算找个蓝桥杯的题目练练手,诶嘿,这就找到一题,话不多说,上 ...

  6. java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大的算式

    题目要求 解题思路 动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客 写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~ 首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号.将第 ...

  7. 蓝桥杯练习系统—算法训练 s01串

    第一部分:题目 问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据 ...

  8. 蓝桥杯 ALGO-20 算法训练 求先序排列 Java版

    问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所 ...

  9. 蓝桥杯:试题 算法训练 采油区域 矩阵前缀和+动态规划+分治+枚举

    资源限制 时间限制:2.0s 内存限制:512.0MB 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M× ...

最新文章

  1. MindInsight计算图可视设计
  2. webvr动画函数requestAnimationFrame
  3. 用MPLAB IDE编程时,软件总是弹出一个窗口提示: “the extended cpu mode configuration bit is enabled,but the program that
  4. RCP:如何移除Toolbar中的Quick Access
  5. 程序员面试金典 - 面试题 16.02. 单词频率(哈希表/Trie树)
  6. 新颖的c语言题目,新颖版c语言经典习题100例(全面面)
  7. DXperienceEval-6.2.4 DXperience for MS Visual Studio 2002 2003 破解
  8. ubuntu14.04-64位机配置android开发环境,ADT,sdk,eclipsea
  9. 一个简单混合协议通讯列子,物联网和互联网通讯。
  10. Qt4_十六进制微调框
  11. ffmpeg drawtext同时添加多行文本
  12. 社区网格员计算机考试考什么,网格员考试内容是什么,网格员考试科目有哪些...
  13. 电脑网线平行线与交叉线的用途?
  14. 产品经理需要了解的宏观趋势(共享经济专题)1/7
  15. use of undeclared identifier ‘CV_HAAR_DO_ROUGH_SEARCH‘
  16. 95后开始考虑结婚?北京剩女80万-全国十大单身男女盛产地都在哪?
  17. 微信小程序之 获取input框输入值
  18. Python中的迭代是什么意思?
  19. 模糊测试框架 Sulley 使用手记
  20. WPF 如何在静态资源定义字体大小

热门文章

  1. Visio 中如何画实现接口的连线
  2. Gridview创建行列 合并列、行类
  3. android CTS test
  4. [网络流24题-9]试题库问题
  5. Linux学习笔记(PATH,cp,mv,文档查看cat/more/less/head/tail)
  6. Linux进阶之进程与线程
  7. Zookeeper与Kafka集群搭建
  8. Java多线程 5 多线程其他知识简要介绍
  9. 深入理解控制反转(IoC)和依赖注入(DI)
  10. 如何用代码爬抓电商数据(附淘宝API调用实例)