16级第四周寒假作业A题

T^T找数字

TimeLimit:1000MS  MemoryLimit:256MB

64-bit integer IO format:%I64d

Problem Description

有一天,T^T来到了师大比赛,看上了师大的ACMer小彩,于是他就跑上去想跟人家搭讪,可是呢,这时候,小彩遇到了一个问题,小彩说,你要是帮我解决了这个

问题,我就把我的手机号给你,T^T一听,顿时乐了起来,这不是我的强项嘛,于是就让小彩说了:

给定整数a1,a2,....,an,判断是否可以从中选出若干数(取数的数目 > 0),使它们的和恰好为k

Input

输入有多组数据,输入的第一行有两个数,分别为n,k(1 <= n <= 20,-10^8 <= k <= 10^8,不考虑k = 0的情况);

第二行是n个数,分别是a1,a2,a3,...,an(-10^8 <= ai <= 10^8)

Output

能找到这样的若干个数的和为k(由于oj无法特判,因此输入保证只有一组这样的数),则输出YES,并且按照顺序输出这些数,否则的话,输出NO

SampleInput

4 13
1 2 4 7
4 15
1 2 4 7

SampleOutput

YES
2 4 7
NO
思路:这一题其实就是入门的搜索题。进入正题,我们先用sum来记录这些数的和,用数组来存给定的n个数,显然,一开始的时候,sum的值为0.然后我们考虑给定的这n个数,对于每个

数,只有两种状态,要么取这个数,要么不取,因为n<=20,我们就直接遍历所有的状态,因为只有两种状态,所以素有状态所形成的就是二叉树,如下图所示

(我就不画出所有的状态了)

在暴力遍历所有的状态之后,当匹配到sum=k的时候,我们就返回根节点,在返回根节点的时候我们就用栈存储符合条件的数,以便于我们有序的输出。

然后就是进行剪枝操作,比如当sum>k的时候,我们就可以略过该节点,以免进行不必要的操作;

大致的内容就是这样,放出我的DFS代码给大家作为参考,具体的可以看我代码上的注释

 1 bool DFS(int i,int sum)//i表示的是当前考虑的是哪个数,sum表示当前的和
 2 {
 3     if(sum>k)
 4         return false;//剪枝
 5     if(i==n)//如果前n项均已经计算过,那么判断此时sum的值是否与k相等,并回溯至上一层
 6         return k==sum;
 7         if(DFS(i+1,sum+a[i]))//加上a[i]的情况
 8         {
 9             s.push(a[i]);
10             return true;
11         }
12         if(DFS(i+1,sum))//不加上a[i]的情况
13             return true;
14         return false;
15 }

时间: 2024-10-06 12:13:36

16级第四周寒假作业A题的相关文章

16级第二周寒假作业J题

Favorite Donut TimeLimit: 1500/1000 MS (Java/Others)  MemoryLimit: 131072/131072 K (Java/Others) 64-bit integer IO format:%I64d Problem Description 露露爱吃甜食.她最喜欢的食物是环形甜甜圈.每天她从同一个面包店买一个环形甜甜圈.环形甜甜圈由n个部分组成.每个部分具有其自身的糖度,甜度可以由从a到z(从低到高)的字母表示,并且环形甜甜圈可以以一个第i个

16级第一周寒假作业H题

涨姿势题2 TimeLimit:1000ms  MemoryLimit:128000KB 64-bit integer IO format:%lld Problem Description 涨姿势题就是所谓的优化题,在组队赛中,队伍发现了一题水题,那么应该交给谁去处理?作为处理水题的代码手,应该具备什么样的素养?1,要快,水题拼的就是速度!2,不能卡水题!水题都卡,绝对不是一个代码手的风范!3,不能出错,错一次即罚时20分钟,对于水题来讲是致命的!4,要能看出来一题是水题!没有这条,上面三条都是

16级第一周寒假作业D题

第八集,体能训练 TimeLimit:1000MS  MemoryLimit:128MB 64-bit integer IO format:%I64d Problem Description 小A和小C跋山涉水,终于来到了特工们要聚集的城市,他们俩在附近找了家宾馆住下.这时,距离特工们聚会的时间越来越近了,是时候来一波体能训练,以防遇到危险,跑得太慢了,被抓住了,就GG了- 于是,小A和小C一起来到了宾馆附近的体育馆的环形操场上跑步,起先,他们两个人约定,一开始他们两个人从同一点,反方向跑步,每

16级第二周寒假作业B题

Line belt TimeLimit:1000MS  MemoryLimit:32768KB 64-bit integer IO format:%I64d Problem Description In a two-dimensional plane there are two line belts, there are two segments AB and CD, lxhgww's speed on AB is P and on CD is Q, he can move with the s

16级第一周寒假作业

涨姿势题2 TimeLimit:1000ms  MemoryLimit:128000KB 64-bit integer IO format:%lld Problem Description 涨姿势题就是所谓的优化题,在组队赛中,队伍发现了一题水题,那么应该交给谁去处理?作为处理水题的代码手,应该具备什么样的素养?1,要快,水题拼的就是速度!2,不能卡水题!水题都卡,绝对不是一个代码手的风范!3,不能出错,错一次即罚时20分钟,对于水题来讲是致命的!4,要能看出来一题是水题!没有这条,上面三条都是

【2017级面向对象程序设计寒假作业】第2次成绩排行

[2017级面向对象程序设计寒假作业]第2次成绩排行 作业地址 http://www.cnblogs.com/easteast/p/8421230.html 评分准则 本次作业满分 20 分,其中代码分数 10分.博客分数 10 分. 代码得分点在于: 运行10个测试点,视通过测试点的数量而定基础分.若存在仓库无代码文件或代码不通过编译.编译后无法运行等则视情况扣除大量分数. 是否符合输出规范.由于此次主要测试在于最终输出的乘客等待时间和,若对于各楼层的停靠情况的输出不合理则扣分较少,希望在之后

2017级面向对象程序设计寒假作业2

Deadline:2018.02.11 22:00 pm 第一次的寒假作业,开启了大家的寒假生活,转眼回到了"小学生作文题"的感觉.不知道是否也通过这次作业,将你的回忆时光拉回到了几年前或十年前,沉思回忆代替了纷扰的知识.很多同学回忆了小学.中学的课任老师,或书法.绘画的老师.无论他们是严厉还是宽容,是鸡汤还是淡定,都或多或少的影响或潜移默化改变着你.在经过一次时光超越后,书归正传,我们开启编码的作业. 一.Pintia小作业 注册pintia,填写昵称为"fzu+学号&qu

2017级面向对象程序设计寒假作业4

Deadline 2018.03.02 22:00 一.完成PTA题目集 题目集链接:https://pintia.cn/problem-sets/966322407656148992/problems 请独立完成,不要抄袭!助教会对提交的代码进行查重,若发现抄袭则倒扣分. 完成题目后请将提交结果的截图贴到下述博客的末尾. 二.自我总结博客 写一篇博客,作为在寒假中关于 C++ 已完成的自学内容的总结.博客中需要包括但不限于以下内容: 已学的内容总结 存疑的问题 花费的总时间 锻炼的代码行数 两

16级第三周寒假作业E题

兵队列训练问题 TimeLimit:1000MS  MemoryLimit:32768KB 64-bit integer IO format:%I64d Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数...,以后从头开始轮流进行一至二报数.一至三报数直到剩下的人数不超