NYOJ-1058 部分和问题
2014-07-22 11:30
183 查看
部分和问题
时间限制:1000 ms | 内存限制:65535 KB难度:2
描述给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。
输入首先,n和k,n表示数的个数,k表示数的和。
接着一行n个数。
(1<=n<=20,保证不超int范围)
输出如果和恰好可以为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成,否则“NO”
样例输入
4 13 1 2 4 7
样例输出
YES 2 4 7
01.
#include<iostream>
02.
#include<cstring>
03.
#include<cstdio>
04.
using
namespace
std;
05.
int
n,k,v,sum,a[25],b[25];
06.
void
dfs(
int
p)
07.
{
08.
if
(sum>=k)
09.
{
10.
if
(sum==k)
11.
{
12.
if
(!v)
13.
{
14.
v=1;
15.
cout<<
"YES"
<<endl;
16.
}
17.
for
(
int
i=0;i<n;i++)
18.
if
(b[i])
19.
cout<<a[i]<<
" "
;
20.
cout<<endl;
21.
}
22.
return
;
23.
}
24.
for
(
int
i=p;i<n;i++)
25.
{
26.
sum+=a[i];
27.
b[i]=1;
28.
dfs(i+1);
29.
sum-=a[i];
30.
b[i]=0;
31.
}
32.
}
33.
int
main()
34.
{
35.
while
(
scanf
(
"%d%d"
,&n,&k)==2)
36.
{
37.
v=0;
38.
memset
(b,0,
sizeof
(b));
39.
for
(
int
i=0;i<n;i++)
40.
cin>>a[i];
41.
sum=0;
42.
dfs(0);
43.
if
(!v)
44.
cout<<
"NO"
<<endl;
45.
}
46.
return
0;
47.
}
相关文章推荐
- nyoj 1058 部分和问题 【DFS】
- NYOJ 1058 部分和问题
- nyoj 1058 部分和问题
- NYOJ 1058--部分和问题【DFS】
- NYOJ 1058 部分和问题(经典题目dfs)
- NYOJ 1058 部分和问题 【DFS】
- NYOJ 1058部分和问题(dfs+回溯)
- nyoj1058部分和问题(简单基础易上手的dfs)
- NYOJ-1058 部分和问题
- 【经典DFS】NYOJ-1058-部分和问题
- NYOJ 1058 部分和问题(dfs)
- nyoj1058 部分和问题
- NYOJ 1058 部分和问题
- 搜索学习(3)--NYOJ1058--部分和问题
- nyoj 1058 部分和问题
- NYOJ 1058 部分和问题
- 部分和问题 NYOJ1058 简单深搜
- nyoj--1058 部分和问题(dfs)
- NYOJ-1058(搜索)-题目----------------------------- 部分和问题
- nyoj 1058 部分和问题 【简单DFS】