NYOJ 1058 深度搜索
来源:互联网 发布:电脑软件消失 编辑:程序博客网 时间:2024/06/05 23:01
部分和问题
时间限制: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
遇到的问题和思路:
因为没有参加学校ACM的集训,所以只能自己在大冬天的家里补知识。说实话感觉和别人差距挺大的了。不过路还是要一步一个脚印的走下去,所以我决定按照书上给的例题一题一题做下去。
这道题是书上的例题,打算看了以后再做一遍。首先这道题目和书上的例题不一样,还要求把样例输出,而且有个bug,最后一个多了一个空格都AC了,起初我还以为是PE。
具体的思路就是:是否选择。仅此而已。
给出代码:
#include<cstdio>
02.
#include<algorithm>
03.
#include<cmath>
04.
#include<cstring>
05.
06.
using
namespace
std;
07.
08.
int
a[30];
09.
bool
b[30];
10.
int
n, k;
11.
12.
bool
dfs(
int
i,
int
sum){
13.
if
(i == n)
return
sum == k;
14.
15.
if
(dfs(i + 1,sum))
return
true
;
16.
17.
if
(dfs(i + 1,sum + a[i])){
18.
b[i] =
true
;
19.
return
true
;
20.
}
21.
22.
return
0;
23.
}
24.
25.
void
solve(){
26.
if
(dfs(0, 0)){
27.
printf
(
"YES\n"
);
28.
int
count1 = 0;
29.
for
(
int
i = 0; i < n; i++){
30.
if
(b[i]&&count1 < 3)
printf
(
"%d "
,a[i]);
31.
}
32.
printf
(
"\n"
);
33.
}
34.
else
printf
(
"NO\n"
);
35.
}
36.
37.
int
main(){
38.
while
(
scanf
(
"%d%d"
, &n, &k)!=EOF){
39.
memset
(a , 0 ,
sizeof
(a));
40.
memset
(b , 0 ,
sizeof
(b));
41.
for
(
int
i = 0; i < n; i++){
42.
scanf
(
"%d"
, &a[i]);
43.
}
44.
45.
solve();
46.
}
47.
return
0;
48.
}
0 0
- NYOJ 1058 深度搜索
- NYOJ 20深度优先搜索
- NYOj-部分和问题-深度优先搜索
- nyoj 部分和问题(深度优先搜索DFS)
- NYOJ--325--深度优先搜索--zb的生日
- 搜索。深搜学习。深度优先搜索之数字全排列。nyoj,组合数
- 深度搜索
- 深度搜索
- 深度搜索
- 深度搜索
- 深度搜索
- 深度搜索
- 深度搜索
- 深度搜索
- 搜索一: 深度搜索
- NYOJ 10 skiing 【搜索】
- nyoj 82 搜索
- NYOJ - skiing(搜索&dp)
- 【SDOI2015】【BZOJ3994】约数个数和
- 一个视觉高手图像处理和深度学习方面的博文目录
- 全局 CSS 样式
- css background-position 图片整合技术
- Qt共享内存读写
- NYOJ 1058 深度搜索
- 迅雷会员帐号获取器
- Linux命令行快捷键 + vi 快捷键
- APK瘦身实践
- 【Cocos2d-x源码分析】 UserDefault如何保存本地数据
- 自定义控件---基础入门篇
- java入门二 1、 类和对象
- SlidingMenu控件的使用
- CSS3动画——雪碧图的实现