蓝桥杯 ALGO-115 算法训练 和为T Java版
问题描述
从一个大小为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版相关推荐
- 蓝桥杯练习系统算法训练习题加答案java版本
附上百度文库的链接:http://wenku.baidu.com/view/afb78d36b42acfc789eb172ded630b1c59ee9bf7 转载于:https://www.cnblo ...
- 蓝桥杯:试题 算法训练 Remember the A La Mode
蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...
- 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)
时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...
- 矩阵乘法 算法训练 试题_蓝桥杯习题集_ 算法训练 矩阵乘法
原文: 算法训练 矩阵乘法 时间限制:1.0s 内存限制:512.0MB 问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s, ...
- 蓝桥杯简单题之十六进制转八进制(JAVA版)
首先对等待程序猿成长之路系列的小伙伴们说声抱歉,春节来临,可能要拖更一段时间,但是草稿已经在写,发布将会于春节后进行发布 春节第一天闲着无聊打算找个蓝桥杯的题目练练手,诶嘿,这就找到一题,话不多说,上 ...
- java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大的算式
题目要求 解题思路 动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客 写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~ 首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号.将第 ...
- 蓝桥杯练习系统—算法训练 s01串
第一部分:题目 问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据 ...
- 蓝桥杯 ALGO-20 算法训练 求先序排列 Java版
问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所 ...
- 蓝桥杯:试题 算法训练 采油区域 矩阵前缀和+动态规划+分治+枚举
资源限制 时间限制:2.0s 内存限制:512.0MB 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M× ...
最新文章
- MindInsight计算图可视设计
- webvr动画函数requestAnimationFrame
- 用MPLAB IDE编程时,软件总是弹出一个窗口提示: “the extended cpu mode configuration bit is enabled,but the program that
- RCP:如何移除Toolbar中的Quick Access
- 程序员面试金典 - 面试题 16.02. 单词频率(哈希表/Trie树)
- 新颖的c语言题目,新颖版c语言经典习题100例(全面面)
- DXperienceEval-6.2.4 DXperience for MS Visual Studio 2002 2003 破解
- ubuntu14.04-64位机配置android开发环境,ADT,sdk,eclipsea
- 一个简单混合协议通讯列子,物联网和互联网通讯。
- Qt4_十六进制微调框
- ffmpeg drawtext同时添加多行文本
- 社区网格员计算机考试考什么,网格员考试内容是什么,网格员考试科目有哪些...
- 电脑网线平行线与交叉线的用途?
- 产品经理需要了解的宏观趋势(共享经济专题)1/7
- use of undeclared identifier ‘CV_HAAR_DO_ROUGH_SEARCH‘
- 95后开始考虑结婚?北京剩女80万-全国十大单身男女盛产地都在哪?
- 微信小程序之 获取input框输入值
- Python中的迭代是什么意思?
- 模糊测试框架 Sulley 使用手记
- WPF 如何在静态资源定义字体大小