nyoj 1058部分和问题
来源:互联网 发布:中俄列车大劫案知乎 编辑:程序博客网 时间:2024/05/19 18:17
部分和问题
时间限制: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
- 来源
#include <stdio.h> #include <string.h> int a[22]; int mark[22]; int n,k; int dfs(int i,int sum) { if(sum == k) //搜索到答案时 return 1; if(sum > k || i == n) //剪枝 return 0; if(dfs(i + 1,sum))//不加的情况 return 1; if(dfs(i + 1,sum + a[i])) //加的情况 { mark[i] = 1; //标记选出数的位置 return 1; } return 0; //加与没加都没搜到答案的情况 } int main() { while(~scanf("%d%d",&n,&k)) { int i; memset(mark,0,sizeof(mark)); for(i = 0;i < n;i ++ ) scanf("%d",&a[i]); if(dfs(0,0)) { printf("YES\n"); for(i = 0;i < n;i ++ ) if(mark[i]) printf("%d ",a[i]); printf("\n"); } else 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 部分和问题
- 学生总结(四)----代码的优化与理解
- Builder模式
- java 基础五 -- 数组
- Android studio 3.0 Beta 2 导入eclipse项目遇到的问题
- XCODE8 API文档解析
- nyoj 1058部分和问题
- MUI 请求的页面无法打开 viewgroup 报错
- UITextfield常用属性大全
- 解决办法:Android Studio报错fail to start git process
- caffe源码分析 vector<Blob<Dtype>*>& bottom
- 手工焊锡通用工艺规程
- 混合排序=快速排序+冒泡排序。排序速度也很快。
- 夜灵的Html笔记Day07——浮动、背景、文本格式化、列表
- 1.2 win7中配置java环境变量