The partial sum problem
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
One day,Tom’s girlfriend give him an array A which contains N integers and asked him:Can you choose some integers from the N integers and the sum of them is equal to K.
-
输入
-
There are multiple test cases.
Each test case contains three lines.The first line is an integer N(1≤N≤20),represents the array contains N integers. The second line contains N integers,the ith integer represents A[i](-10^8≤A[i]≤10^8).The third line contains an integer K(-10^8≤K≤10^8).
输出
- If Tom can choose some integers from the array and their them is K,printf ”Of course,I can!”; other printf ”Sorry,I can’t!”. 样例输入
-
4 1 2 4 7 13 4 1 2 4 7 15
样例输出
-
Of course,I can! Sorry,I can't!
-
There are multiple test cases.
这是一道搜索题,非常难理解的深搜,等我做的多了可能就能理解了吧!
01.
#include<stdio.h>
02.
#include<string.h>
03.
#include<algorithm>
04.
using
namespace
std;
05.
int
n,t,ans,a[200],k,ok;
06.
void
dfs(
int
m)
07.
{
08.
if
(ans>k)
09.
return
;
10.
if
(ans==k)
11.
ok=1;
12.
for
(
int
i=m; i<n; i++)
13.
{
14.
ans+=a[i];
15.
dfs(i+1);
16.
ans-=a[i];
17.
}
18.
}
19.
int
main()
20.
{
21.
while
(
scanf
(
"%d"
,&n)!=EOF)
22.
{
23.
ans=0;
24.
for
(
int
i=0; i<n; i++)
25.
scanf
(
"%d"
,&a[i]);
26.
scanf
(
"%d"
,&k);
27.
ok=0;
28.
dfs(0);
29.
if
(!ok)
30.
printf
(
"Sorry,I can't!\n"
);
31.
else
32.
printf
(
"Of course,I can!\n"
);
33.
}
34.
return
0;
35.
}