首页 > 代码库 > NYOJ 1058 部分和问题
NYOJ 1058 部分和问题
部分和问题
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
- 给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。
- 输入
- 首先,n和k,n表示数的个数,k表示数的和。
接着一行n个数。
(1<=n<=20,保证不超int范围) - 输出
- 如果和恰好可以为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成,否则“NO”
- 样例输入
4 131 2 4 7
- 样例输出
YES2 4 7
- 来源
- 经典题目
- 上传者
- TC_杨闯亮
解题:一顿乱搜。。。。。。View Code1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <vector> 6 #include <climits> 7 #include <algorithm> 8 #include <cmath> 9 #define LL long long10 using namespace std;11 int n,d[21],ans[21],m,res;12 bool dfs(int cur,int add,int tot) {13 if(cur >= n) {14 if(add == res) {15 m = tot;16 return true;17 }18 return false;19 }20 if(dfs(cur+1,add,tot)) {21 return true;22 }23 if(dfs(cur+1,add+d[cur],tot+1)) {24 ans[tot] = d[cur];25 return true;26 }27 return false;28 }29 int main() {30 while(~scanf("%d %d",&n,&res)) {31 int i;32 for(int i = 0; i < n; i++)33 scanf("%d",d+i);34 if(dfs(0,0,0)) {35 puts("YES");36 for(i = 0; i+1 < m; i++)37 printf("%d ",ans[i]);38 printf("%d\n",ans[i]);39 } else puts("NO");40 }41 return 0;42 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。