927 The partial sum problem【dfs】

来源:互联网 发布:社会工程学资源知乎 编辑:程序博客网 时间:2024/05/19 14:52

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!”.
样例输入
41 2 4 71341 2 4 715
样例输出
Of course,I can!Sorry,I can't!

给出一些数,让你输出是否可以累加某些值得到指定的结果,dfs题目,比较简单的方法就是每个物品有选和不选两种情况,依次递归下去,出现需要的结果就标记上,然后输出对应结果,注意条件的控制,一切ok..




#include<stdio.h>int n,m,x[105],kase;void dfs(int i,int s){if(i>n||s>m||kase){return;}if(s==m){kase=1;return;}dfs(i+1,s);//不选dfs(i+1,s+x[i]);//选} int main(){while(~scanf("%d",&n)){for(int i=0;i<n;++i){scanf("%d",x+i);}scanf("%d",&m);kase=0;dfs(0,0);if(kase)//标记变量{printf("Of course,I can!\n");continue;}printf("Sorry,I can't!\n");} return 0;}



0 0