NYOJ-1058- 部分和问题(DFS)
来源:互联网 发布:优胜网络在线教育 编辑:程序博客网 时间:2024/06/01 07:54
部分和问题
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
给定整数a1、a2、…….an,判断是否可以从中选出若干数,使它们的和恰好为K。
输入
首先,n和k,n表示数的个数,k表示数的和。
接着一行n个数。
(1<=n<=20,保证不超int范围)
输出
如果和恰好可以为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成,否则“NO”
样例输入
4 13
1 2 4 7
样例输出
YES
2 4 7
这道题用DFS来做,用DFS来找多个数的部分和,大于返回,等于退出,小于继续(这道题在输出没让我们考虑行末尾是否有空格)
代码如下
#include <cstdio>#include <cstring>long long m;int i[22];int flag=0;int j[22];int num;int n;void dfs(int x,int sum){ if(flag) return ; if(sum>m) return ; else if(sum==m) { flag=1; return ; } for(int a = x; a <n; a ++) { sum+=i[a]; j[num]=i[a]; num++; dfs(a+1,sum); if(flag) return ; sum-=i[a]; num--; }}int main(){ while(scanf("%d%lld",&n,&m)!=EOF) { flag=0; num=0; for(int a = 0; a < n; a ++) scanf("%d",&i[a]); int k; dfs(0,0); if(!flag) printf("NO\n"); else { printf("YES\n"); for(int a =0; a < num; a ++) printf(a==num-1?"%d\n":"%d ",j[a]); } } return 0;}
阅读全文
0 0
- NYOJ 1058 部分和问题 (DFS)
- NYOJ 1058部分和问题(DFS)
- NYOJ 1058 部分和问题(DFS)
- NYOJ-1058- 部分和问题(DFS)
- NYOJ 1058 部分和问题(dfs)
- NYOJ 1058 部分和问题 【DFS】
- nyoj 1058 部分和问题 【DFS】
- NYOJ 1058--部分和问题【DFS】
- NYOJ 1058 部分和问题【DFS】
- nyoj 1058 部分和问题 【简单DFS】
- NYOJ 1058 部分和问题(dfs)
- nyoj--1058--部分和问题(dfs)
- NYOJ 1058 部分和问题(dfs)
- nyoj--1058 部分和问题(dfs)
- NYOJ 1058 部分和问题 (DFS)
- NYOJ - 1058 - 部分和问题(DFS+减枝)
- NYOJ--1058--dfs--部分和问题
- [DFS] NYOJ-1058-部分和问题
- 一个自制的小游戏
- Centos yum安装php+mysql(mariadb)+httpd(apache)环境
- ctrl+c,ctrl+d,ctrl+z在linux程序中意义和区别
- 社群运营:从100个社群中选出有特色的8个分享给你
- linux下配置,启动多个tomcat
- NYOJ-1058- 部分和问题(DFS)
- 层次遍历构造二叉树 java
- ==和equals()的关系
- 电脑是怎样执行编程语言的
- Android视频播放和横竖屏切换
- LinkedList的实现原理
- VC调用exe文件
- filegetname方法+filegetname(desc_bfile,directory,filename)+使用filegetname方法
- React--事件处理