NYOJ-1058 部分和问题
来源:互联网 发布:在线格式化sql成一行 编辑:程序博客网 时间:2024/05/07 13:41
部分和问题
时间限制: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
思路分析:DFS搜索,不加剪枝应该也能AC吧~我提交了好几次WA,原来是要处理多组数据输入,题目也没说清楚呀。。还有如果有多组解,只输出第一个解就行了。
#include <cstdio>#include <vector>#define MAX 20using namespace std;int a[MAX];vector<int> vec;bool flag = false;void dfs( int cur, int n, int k, int curSum ) { if( curSum == k ) { if( flag ) return; flag = true; printf( "YES\n" ); for( int i = 0; i < vec.size(); i++ ) { printf( "%d ", vec[i] ); } printf( "\n" ); return; } for( int i = cur; i < n; i++ ) { if( curSum + a[i] > k ) continue; vec.push_back( a[i] ); dfs( i + 1, n, k, curSum + a[i] ); vec.pop_back(); }}int main() { int n, k; while( scanf( "%d%d", &n, &k ) != EOF ) { flag = false; for( int i = 0; i < n; i++ ) { scanf( "%d", &a[i] ); } dfs( 0, n, k, 0 ); if( !flag ) { printf( "NO\n" ); } } return 0;}
0 0
- NYOJ-1058 部分和问题
- NYOJ 1058 部分和问题
- nyoj 1058 部分和问题
- nyoj 1058 部分和问题
- NYOJ-1058 部分和问题
- nyoj 1058 部分和问题
- NYOJ-1058部分和问题
- NYOJ 1058 部分和问题
- NYOJ 1058 部分和问题
- NYOJ 1058 部分和问题
- NYOJ 1058 部分和问题
- NYOJ 1058 部分和问题
- NYOJ-1058 部分和问题
- NYOJ-1058-部分和问题
- nyoj 1058 部分和问题
- NYOJ-1058-部分和问题
- nyoj 1058部分和问题
- [NYOJ] 1058 部分和问题
- 比较c++中的值传递,引用传递,指针传递
- Android ping++接入
- Hibernate-Criteria接口
- AppCon 混合式开发
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
- NYOJ-1058 部分和问题
- Builder 混合式开发
- 树莓派GPIO口的操作
- 如何选用正确的光源
- 微信热修复tinker及tinker server快速接入
- get请求表单的action属性后不能带参数
- 刘汝佳 BigInteger 大数模板
- 后续工作计划以及现在进度报告
- 欢迎访问我的博客