#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); }
부분집합의 합
2009. 7. 29. 21:08