部分和问题
2015-10-22 12:50
218 查看
//-------------部分和问题----------- //给定整数a1,a2, ,,,an,判断是否可以从中选出若干数, 使他们的和恰好为k // 其中n范围为【1,20】 //算法分析:从a1开始按顺序决定每个数加或不加,在全部n个数都决定后再判断他们的和是不是k即可、 #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std; int n, k; int a[22]; bool dfs(int i, int sum) { if (i == n) return sum == k; //如果前n项都计算过了,则返回sun是否与k相等 if (dfs(i+1, sum)) //不加上a【i】的情况 return true; if (dfs(i+1, sum+a[i])) //加上a【i】的情况 return true; return false; //无论是否加上a【i】都不能凑成sum则返回false } int main() { memset(a, 0, sizeof(a)); cin >>n >> k; for (int i=0; i<n; i++) cin >> a[i]; if (dfs(0, 0)) cout << "YES"<< endl; else cout << "NO"<< endl; return 0; }
相关文章推荐
- 部分和问题
- 回调函数
- 词法分析实验总结
- HDU 3830 Checkers(LCA)
- C++中关于main函数的几点说明
- HTML学习笔记之多媒体网页效果
- C++中关于main函数的几点说明
- 将h.264视频流封装成flv格式文件(二.开始动手)
- 【MFC】QRCODE 批量生成 并输出至Excel
- 【Android应用场景】图片瀑布流(一)
- Xilinx ISE编辑器在win8下的使用配置
- 九度OJ 1064:反序数 (基础题)
- 如何更新SDK
- 九度OJ 1064:反序数 (基础题)
- 计算几何模板
- 【SSH项目实战】国税协同平台-4.用户管理需求分析&CRUD方法2
- 2015年大二上-数据结构-顺序表(2)-删除元素
- [NOIP集训]10月21日
- Android Log类封装
- Web前端开发学习2:动态网页