hdu 1258 从n个数中找和为t的组合 (DFS)
题意:首先给你一个t,然后是n,后面输入n个数,然后让你求的是n个数中和为t的序列总共有多少种,把他们按从左到右的顺序输出来。
Sample Input
4 6 4 3 2 2 1 1
5 3 2 1 1
400 12 50 50 50 50 50 50 25 25 25 25 25 25
0 0
Sample Output
Sums of 4:
4
3+1
2+2
2+1+1
Sums of 5:
NONE
Sums of 400:
50+50+50+50+50+50+25+25+25+25
50+50+50+50+50+25+25+25+25+25+25
# include <cstdio>
# include <cmath>
# include <iostream>
# include <cstring>
# include <algorithm>
using namespace std ; int a[] ;
int save[] ;
int n , t ;
bool flag ; bool cmp(const int &x , const int &y)
{
return x > y ;
} void dfs(int count , int L , int pos)
{
if (L > t)
return ;
if (L == t)
{
for(int j=;j<count-;j++)
{
printf("%d+",save[j]);
}
printf("%d\n",save[count-]);
flag = ;
return ;
}
for (int i = pos ; i < n ; i++)
{
save[count] = a[i] ;
dfs (count+,L+a[i] , i+) ;
while (a[i] == a[i+])
i++ ;
} } int main()
{
//freopen("in.txt","r",stdin) ; while (scanf("%d %d" , &t , &n) != EOF)
{
if (t == && n == )
break ;
int i ;
for (i = ; i < n ; i++)
{
scanf("%d" , &a[i]) ;
}
sort(a,a+n,cmp) ;
flag = ;
printf("Sums of %d:\n",t);
dfs(,,) ;
if (flag == )
{
printf("NONE\n") ;
}
} return ; }
hdu 1258 从n个数中找和为t的组合 (DFS)的更多相关文章
- ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)
1061: 从三个数中找出最大的数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 124[Submit][Status][We ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些. 先拿10000个数建堆, ...
- A+B Again(在某个数中找大于m的最小约数)
A+B Again Accepted : 15 Submit : 243 Time Limit : 1000 MS Memory Limit : 65536 KB 题目描述 上次趣味赛小明的 ...
- poj2578---三个数中找出第一个大于168的
#include <stdio.h> #include <stdlib.h> int main() { int a,b,c; scanf("%d %d %d" ...
- 海量数据中找top K专题
1. 10亿个数中找出最大的1000个数 这种题目就是分治+堆排序. 为啥分治?因为数太多了,全部加载进内存不够用,所以分配到多台机器中,或者多个文件中,但具体分成多少份,视情况而定,只要保证满足内存 ...
- 一道经典的面试题:如何从N个数中选出最大(小)的n个数
转载:https://zhidao.baidu.com/question/1893908497885440140.html 这个问题我前前后后考虑了有快一年了,也和不少人讨论过.据我得到的消息,Goo ...
- 小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和
小易邀请你玩一个数字游戏,小易给你一系列的整数.你们俩使用这些整数玩游戏.每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字. 例如: 如果{2,1,2 ...
- 在数组中找几个数的和等于某个数[LeetCode]
首先明确一点,这个方面的问题设计到的知识点是数组的查找的问题.对于类似的这样的查找操作的具体办法就是三种解决方法: 1.暴力算法,多个for循环,很高的时间复杂度 2.先排序,然后左右夹逼,但是这样会 ...
- 3sum(从数组中找出三个数的和为0)
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
随机推荐
- SparkSQL和DataFrame
SparkSQL和DataFrame SparkSQL简介 Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用.它 ...
- HDU - 3002 King of Destruction(最小割)
http://acm.hdu.edu.cn/showproblem.php?pid=3002 最小割模板 #include<iostream> #include<cmath> ...
- 使用bootstrap的相关配置
<html> <head> <title>java微辅导</title> <meta charset="UTF-8"/> ...
- dijkstra补充
dijkstra主要写法: priority_queue<pair<int,int> >q; //大根堆 //dis第一维为dis的相反数 void dijkstra(){ m ...
- 电脑爱好——PE系统分区工具 分区时函数错误,报000000001错误 解决方法
1.启动硬盘分区软件diskgenius(一般都是这个分区软件,这个PE系统自带的居多) 2.将现有的分区全部删掉 3.选择菜单栏——“硬盘”——“转换分区表类型为MBR格式”——转换完成 4.快速分 ...
- python技巧 switch case语句
不同于C语言和SHELL,python中没有switch case语句,关于为什么没有,官方的解释是这样的 使用Python模拟实现的方法: def switch_if(fun, x, y): ...
- centos7之系统优化方案
优化条目: 修改ip地址.网关.主机名.DNS等 关闭selinux,清空iptables 添加普通用户并进行sudo授权管理 更新yum源及必要软件安装 定时自动更新服务器时间 精简开机自启动服务 ...
- mod_wsgi 的两种模式
mod_wsgi 的两种模式 http://ssmax.net/archives/977.html http://www.cnblogs.com/yuxc/p/3555005.html mod_wsg ...
- 【比赛游记】NOIP2018游记
往期回顾:[比赛游记]NOIP2017游记 转眼间又过去了一年,当年还是初中生的我已经摇身一变成为了AHSOFNU的高一学生. 回顾这一年我好像也没学什么新东西,要说有用的可能就无旋Treap吧,不知 ...
- MAC上mongodb连接不上
1.在Mac客户端里输入 mongo,发现mongo连接不上了,原因是mongo的服务没有开启. 2.在命令行了输入 mongod,开启服务的命令 3.启动起来以后,用mongo连接服务器.