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!
-
深度优先搜索:它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。
-
#include<stdio.h> int a[1000]; int sum=0; int k,n; bool p; void f(int l) { if(sum==k) p=true; if(sum>k) { return; } for(int i=l;i<n;i++) { sum+=a[i]; f(i+1); sum-=a[i]; } } int main() { while(scanf("%d",&n)!=-1) {p=false; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } scanf("%d",&k); f(0); if(p) printf("Of course,I can!\n"); else printf("Sorry,I can't!\n"); } }
-
There are multiple test cases.