深度优先搜索的运用

给出一个整数sum,以及n个数。若能用n个数当中的一些数组成sum。问有多少种组合方法 例如: 输入: 4 6 4 3 2 2 1 1 Sums of 4: 4 3+1 2+2 2+1+1 则输出: 4
#include
#include
using namespace std ;

int a[1000] = {0} , n ;
int count = 0 ;

void dfs(int sum , int i)  {
    if(sum == 0)    {
        count++ ;
        return ;
    }
    for( int k = i ; k < n ; k++)
        if(i == k||a[k] != a[k-1])
            dfs(sum - a[k] , k+1) ;
}

int main()  {
    int sum ;
    cin >> sum ;
    cin >> n ;
    for(int i = 0 ; i < n ; i++)
        cin >> a[i] ;
    dfs(sum,0);
    cout << count << endl ;
}
posted @ 2014-10-19 21:05  NYNU_ACM  阅读(148)  评论(0编辑  收藏  举报