#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("input.txt");
ofstream fout("output.txt");
int a[5]={5,6,10,11,16},check[100]={0}; //오름차순 정렬된 데이터.
int n=5,find=21;  //n원소의 수, find 목표 수

void subsum(int p,int s){
	int promising;
	promising= (p<=n) && (s==find || s+a[p]<=find);  //promising 유망 판별 변수, 가지치기
	if(promising){
		if(s==find){
			for(int i=0;i<n;i++){
				if(check[i])
					cout << a[i] << " ";
			}
			cout << endl;
		}
		else{
			check[p]=1;
			subsum(p+1,s+a[p]); //현재 a[p]를 포함시키고 호출
			check[p]=0;
			subsum(p+1,s); // 포함시키지 않고 호출
		}
	}
}
void main(){
	subsum(0,0);  
}

+ Recent posts