The partial sum problem

算法:搜索

描述 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!

代码:

#include <iostream>
  #include <string>
  #include <cstring>
  #include <algorithm>
  #include <iomanip>
  using namespace std;
  int n,m,a[25],flag;
  int dfs(int i,int sum)
  {
    if(i==n)
        return sum==m;
    if(dfs(i+1,sum))
        return 1;
    if(dfs(i+1,sum+a[i]))
        return 1;
    return 0;

  }
   int main()
   {
   	  int i,j,k;
   	  while(cin>>n)
   	  {
   	  	  for(i=0;i<n;i++)
   	  	  cin>>a[i];
   	  	  cin>>m;
   	  	  if(dfs(0,0)) cout<<"Of course,I can!"<<endl;
   	  	  else cout<<"Sorry,I can't!"<<endl;
	  }
	  return 0;
   }



posted @ 2016-03-21 13:31  (慎独)  阅读(330)  评论(0编辑  收藏  举报