nyoj1058 部分和问题
2016-04-19 20:34
183 查看
/* 部分和问题 时间限制: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 */ #include <stdio.h> #include <string.h> int a[25]; int book[25]; int n,ans; int sum; int flag; void dfs(int i) { if(sum>ans||flag) { return ; } if(sum==ans) { flag=1; printf("YES\n"); for(int j=0;j<n;j++) { if(book[j]) { printf("%d ",a[j]); } } printf("\n"); } for(int k=i;k<n;k++) { sum=sum+a[k]; book[k]=1; dfs(k+1); sum=sum-a[k]; book[k]=0; } } int main() { while(~scanf("%d%d",&n,&ans)) { memset(book,0,sizeof(book)); sum=0; flag=0; int i; for(i=0;i<n;i++) { scanf("%d",&a[i]); } dfs(0); if(!flag) { printf("NO\n"); } } return 0; }
通过这道题 我发现 我忘了本 即搜索的最根本的意义
知道出口 知道是否需要做标记 这才是最重要的 有些能做的 都交给搜索来做吧 不要想太多 搜索是很强大的
相关文章推荐
- 剪切坐标轴
- linux sysstat 安装使用
- 深入研究String StringBuffer StringBuilder 的拼接字符串
- Chilkat----开源站点之VS2010 CKMailMan一个很好的邮件发送开源开发包
- 《校园封神榜》个人工作总结——第二天
- 1000!的结果中如果用十进制表示,有多少位
- eclipse中的android项目转入android studio
- Oj平台-指针n个数逆序
- 《啊哈算法》第一章 排序
- jQuery学习(二)
- xml转换之
- 第一冲刺阶段工作总结01
- leetcode343-Integer Break(整数拆分求最大乘积)
- markdown语法熟悉
- [Qemu] 解决在qemu里安装的centos7 gnome-session无法正常启动的问题
- POJ 1469 COURSES(匈牙利算法二分图最大匹配)
- java.关于线程同步的几个知识点
- 《校园封神榜》个人工作总结——第一天
- 作业5 需求分析
- Java堆中的对象分配、布局和访问