01-27 03:18
벤치마킹
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 영통칠프로칠백식당
- 사진문자추출
- 영통역소고기
- 푸르지오포레피스
- 커피
- 영통외식
- 고마워다음
- 결항
- 사진에서 글자추출
- 양양솔비치아침
- DFS
- 아이혼자다녀옴
- 커피쏟음
- 가족소고기외식
- 파이썬
- 당근마켓중고차
- 오트눈썰매장
- 양양솔비치 뷔페
- 양양솔비치조식
- 싱가폴중학교수학문제
- 에어아시아
- 중학교입학수학문제
- 주차넉넉
- 홍시스무디
- 결항전문
- 편도수술
- 종이캐리어
- 양양솔비치세프스키친
- 사진문자추출하기
- 검색완료
Archives
- Today
- Total
너와나의 관심사
조합의 recursive 알고리즘 간단구현 본문
순열은 쉽게 brute force 로 구현이 가능한데 조합은 좀 헷갈리는 경우가 있다.
즉 아래 로또 처럼 조합의 문제일 경우 하나의 규칙을 정하는것이 중요하다. 예를 들면 오름 차순 같은 ..어떤 특정된 조건을 기준으로
값을 정하면 된다.
아래 문제를 문제를 저 아래 예제 코드를 참고하여 쉽게 풀수 있다.
알고리즘은 재미 있따고 생각해보자.. 가끔 보면 재밌긴 한데
즉 규칙을 정해보는 recursive code
ttps://www.acmicpc.net/problem/6603
#include#include #include #include #include #include #include #include using namespace std; void dbg(vector &v){ for (int i = 0; i < v.size(); i++) cout << v[i] << " "; cout << "\n"; } int N, C; vector visit; int value[1000] = { 0, }; void print_out(vector v){ for (int i = 0; i &v){ if (v.size() == N){ //print print_out(v); return; } for (int i = 1; i <= N; i++){ if (!visit[i]){ visit[i] = true; v.push_back(i); perm(v); v.pop_back(); visit[i] = false; } } } void comi(vector &v, int value){ if (v.size() == C){ print_out(v); return; } for (int i = 1; i <= N; i++){ if (!visit[i] && i > value ){ //int tmp = visit[i]; visit[i] =true; v.push_back(i); comi(v, i); v.pop_back(); visit[i] = false; } } } int main(void){ int tmp; //freopen("input.txt", "r", stdin); setbuf(stdout, NULL); cin >> N >> C; vector temp; visit.resize(N + 1, 0); comi(temp, 0); return 0; }
Comments