部分和问题

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描写叙述
给定整数a1、a2、.......an。推断能否够从中选出若干数,使它们的和恰好为K。

输入
首先,n和k,n表示数的个数。k表示数的和。

接着一行n个数。

(1<=n<=20,保证不超int范围)

输出
假设和恰好能够为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成。否则“NO”
例子输入
  1. 4 13
  2. 1 2 4 7
例子输出
  1. YES
  2. 2 4 7
来源

source=%E7%BB%8F%E5%85%B8%E9%A2%98%E7%9B%AE" style="text-decoration:none; color:rgb(55,119,188)">经典题目

上传者

userid=TC_%E6%9D%A8%E9%97%AF%E4%BA%AE" style="text-decoration:none; color:rgb(55,119,188)">TC_杨闯亮


搜索简单题。递归的时候一定要注意结束的条件,就是临界条件,降低递归的开销;

以下是代码:
  1. #include <cstdio>
  2. #include <cstring>
  3. using namespace std;
  4. int a[30],n,k,sum;
  5. bool visit[30],flag;
  6. void dfs(int pos)
  7. {
  8. if(flag==true)
  9. return ;
  10. if(sum>=k)
  11. {
  12. if(sum==k)
  13. {
  14. flag=true;
  15. printf("YES\n");
  16. for(int i=0;i<n;i++)
  17. if(visit[i])//标记
  18. printf("%d ",a[i]);
  19. }
  20. return;//这里就是递归结束的条件。在这里加一个结束条件,时间花销就降低了不少
  21. }
  22. for(int i=pos;i<n;i++)//搜索的过程
  23. {
  24. sum+=a[i];
  25. visit[i]=1;
  26. dfs(i+1);
  27. sum-=a[i];
  28. visit[i]=0;
  29. }
  30. }
  31. int main()
  32. {
  33. int i;
  34. while(scanf("%d%d",&n,&k)!=EOF)
  35. {
  36. for(i=0;i<n;i++)
  37. scanf("%d",&a[i]);
  38. memset(visit,0,sizeof(visit));
  39. flag=false;
  40. dfs(0);
  41. if(!flag)
  42. printf("NO\n");
  43. }
  44. return 0;
  45. }

nyist oj 1058 部分和问题 (DFS搜索)的更多相关文章

  1. nyist oj 19 擅长排列的小明(dfs搜索+STL)

    擅长排列的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 小明十分聪明.并且十分擅长排列计算.比方给小明一个数字5,他能立马给出1-5按字典序的全排列,假设你想 ...

  2. 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)

    从周三课开始总算轻松了点,下午能在宿舍研究点题目啥的打一打,还好,刚开学的课程还算跟得上,刚开学的这些课程也是复习以前学过的知识,下半学期也不敢太划水了,被各种人寄予厚望之后瑟瑟发抖,只能努力前行了~ ...

  3. hdu 1312:Red and Black(DFS搜索,入门题)

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. [ZOJ 1011] NTA (dfs搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1011 题目大意:在一棵树上,给你起始状态,问你能否到达终止状态. ...

  5. HDU 1312:Red and Black(DFS搜索)

      HDU 1312:Red and Black Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & ...

  6. [Swust OJ 799]--Superprime Rib(DFS)

    题目链接:http://acm.swust.edu.cn/problem/799/ Time limit(ms): 1000 Memory limit(kb): 10000   Description ...

  7. hihocoder 1050 树中的最长路(动态规划,dfs搜索)

    hihocoder 1050 树中的最长路(动态规划,dfs搜索) Description 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅 ...

  8. sdut 2152:Balloons(第一届山东省省赛原题,DFS搜索)

    Balloons Time Limit: 1000MS Memory limit: 65536K 题目描述 Both Saya and Kudo like balloons. One day, the ...

  9. 蓝桥杯 历届试题 剪格子(dfs搜索)

    历届试题 剪格子 时间限制:1.0s   内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |* || +--****--+ ||* | ** ...

随机推荐

  1. css与jquery、图标字体

    *)还能这样选择 header #search input[type="text"] *)按钮常用颜色:#008cBA(字母大小写没有区别) *)清除浮动后,text-align没 ...

  2. javascript与DOM节点的结合使用

    文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象 ...

  3. HDU 4406 GPA

    GPA Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 440664 ...

  4. linux 下查看二进制文件

    查看二进制有以下几种方法: 方法一:hexdump apt-get install libdata-hexdumper-perl 安装好之后就可以直接hexdump your_binary_file ...

  5. COGS——T2084. Asm.Def的基本算法

    http://cogs.pro/cogs/problem/problem.php?pid=2084 ★☆   输入文件:asm_algo.in   输出文件:asm_algo.out   简单对比时间 ...

  6. 国庆 day 6 上午

    1. 角谷猜想(kakutani.pas/c/cpp)(kakutani.in/out)时间限制:1s/空间限制:256M[题目描述] 某个名字末尾是 654321 的小 A 同学是个大家眼中公认的学 ...

  7. BZOJ 2982 combination Lucas定理

    题目大意:发上来就过不了审核了--总之大意就是求C(n,m) mod 10007 m,n∈[1,2*10^8] 卢卡斯定理:C(n,m)=C(n%p,m%p)*C(n/p,m/p) mod p 要求p ...

  8. 在spring-mybatis.xml 中配置pagehelper

    maven导包:<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</ ...

  9. 用efibootmgr管理UEFI启动项,添加丢失的启动项

    UEFI用来替代传统BIOS引导操作系统,学会修改UEFI启动项也变得十分重要,UEFI全称为:“统一的可扩展固件接口”(Unified Extensible Firmware Interface), ...

  10. Flex之文件目录浏览器实例

    Flex之文件目录浏览器实例 Flex的AIR项目 <?xml version="1.0" encoding="utf-8"?> <mx:Wi ...