深度优先搜索的运用
给出一个整数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 ;
}