Untitled
unknown
plain_text
2 years ago
1.2 kB
5
Indexable
#include <iostream>
using namespace std;
int array[1001];
int so[1001];
int visit[1001];
int compare[100][100];
int k,n,result;
int count1;
int check (int a){
for(int i = 0; i < count1; i++){
int dem = 0;
for(int j = 0; j < a; j++){
if(compare[i][j] == so[j]) dem++;
else break;
}
if(dem == a) return 0;
}
return 1;
}
void backtrack(int a,int sum,int len){
if(sum == k){
if(check(len)){
for(int i = 0; i < len ; i++){
compare[count1][i] = so[i];
}
count1 ++;
result ++;
}
return;
}
if(sum > k || a >= n) return;
for(int i = 0; i < 2; i++){
if(i == 0) backtrack( a + 1,sum,len);
else{
so[len] = array[a];
backtrack(a + 1,sum + array[a],len+1);
so[len] = 0;
}
}
}
int main(){
///freopen("Text.txt","r",stdin);
int T;cin >> T;
for(int tc = 1; tc <= T; tc ++){
cin >> k >> n;
for(int i = 0; i < n; i++){
cin >> array[i];
so[i] = 0;
for(int j = 0; j < n; j++){
compare[i][j] = 0;
}
}
result = 0;
count1 = 0;
backtrack(0,0,0);
if(result != 0){
cout << "#" << tc << " " << result << endl;
}
else cout << "#" << tc << " " << -1 << endl;
}
return 0;
}Editor is loading...