南阳理工---题目1058部分和问题
来源:互联网 发布:巴适公交暂无数据 编辑:程序博客网 时间:2024/05/22 10:55
- 描述
- 给定整数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_杨闯亮
分析:这是一道简单的搜索问题,用的是DFS,从a[0]开始决定一个数加不加,需要画一个简单的二叉树的图,刚开始的时候sum=0;i=0;遇到DFS用到的就是递归,递归是搜索的基础。需要记录一下路径,用的是vis标记数组;代码如下:
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int i,j,k,n,sum=0;int vis[30];int a[30];bool dfs(int i,int sum){ if(i==n) return sum==k; if(dfs(i+1,sum)) return true; if(dfs(i+1,sum+a[i])) { vis[i]=1; return true; } return false;}int main(){ while(cin>>n>>k) { for(i=0;i<n;i++) cin>>a[i]; memset(vis,0,sizeof(vis)); if(dfs(0,0)) printf("YES\n"); else printf("NO\n"); for(i=0;i<n-1;i++) if(vis[i]) printf("%d ",a[i]); if(vis[i]) printf("%d\n",a[i]); } return 0;}
0 0
- 南阳理工---题目1058部分和问题
- 南阳理工OJ_题目47 过河问题
- 南阳理工OJ_题目38 布线问题
- 南阳理工OJ 题目38 布线问题
- 南阳理工ACM 题目57 6174问题
- 南阳理工 oj 题目38 布线问题
- 南阳 1058 部分和问题
- 南阳理工OJ_题目104 最大和
- 部分和问题 南阳oj 1058
- 南阳理工oj题目练习---括号配对问题
- 南阳理工ACM-题目2-括号配对问题
- 南阳理工OJ_题目14 会场安排问题
- 南阳理工OJ_题目42 一笔画问题
- 南阳理工OJ 题目42 一笔画问题
- 南阳理工ACM 题目24 素数距离问题
- 南阳理工ACM 题目22 素数求和问题
- 南阳理工ACM 题目2 括号配对问题
- 括号配对问题 (南阳理工oj-题目2)
- ARC机制
- 一种分布式框架设计(三)
- 为什么匿名内部类调用的方法内局部变量必须为final
- HDU 4043 Eliminate Witches! (求概率推公式 + 大数)
- 八皇后问题
- 南阳理工---题目1058部分和问题
- vim简单的实用总结
- windows server 2008r2 64位安装openssh
- 机器学习中导数最优化方法
- qnx常用命令
- Android--线程池实现方式解析
- 指针,和指针的引用
- UVa 437 - The Tower of Babylon(DAG动态规划)
- 向iOS进军(3): Info.plist含义详解