nyoj 1058 部分和问题
2015-08-21 21:42
127 查看
问题主题:求数组部分和 |
问题描述: 给定整数a1,a2, … an,判断能否从中选出若干个数,使得它们的和为k。 限制条件: 1<=n<=20 -108<=ai<=108 -108<=k<=108 |
样例: 输入 n=4 a={1,2,4,7} k=13 输出 Yes (13=2+4+7) 输入 n=4 a={1,2,4,7} k=15 输出 No |
用递归的方法实现深度优先搜索,从a0开始依次判断,决定ai加入或不加入,对每一个种组合进行判断,决定是否存在和为k的情况。
#include<stdio.h> int a[1010]; int n,k; 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])) return true; return false; } void solve() { if(dfs(0,0)) printf("Yes\n"); else printf("No\n"); } int main() { while(scanf("%d%d",&n,&k)!=EOF) { for(int i=0;i<n;i++) scanf("%d",&a[i]); solve(); } return 0; }
相关文章推荐
- js的History对象
- 继承,抽象,接口,多态
- JList的ListSelectionEvent的几个问题请教
- 关键字Static
- 五大常用算法之五:分支限界法
- Java反射性能优化(上)
- poj 2777 线段树难题
- 施一公在《科学》发表突破性成果 专家称有望拿诺奖
- poj 2513 Colored Sticks(欧拉路径+并检查集合+特里)
- Mysql 建表 数据类型选择
- NYOJ-458:小光棍数
- java.lang.UnsatisfiedLinkError: Couldn't load libjniFramework from loader
- 寻找数组中的最大值和最小值
- 五大常用算法之四:回溯法
- [C++11 并发编程] 08 - Mutex std::unique_lock
- HDU 1394 Minimum Inversion Number
- 黑马程序员----java基础之异常和File文件类
- 【待整理】IOS开发之下载
- 求点云的边界的方法小结
- 黑马程序员--Java基础学习(面向对象)第八天