- toc {:toc}
๋ฌธ์
๋ ์ผ ๋ก๋๋ {1, 2, โฆ, 49}์์ ์ย 6๊ฐ๋ฅผ ๊ณ ๋ฅธ๋ค.
๋ก๋ ๋ฒํธ๋ฅผ ์ ํํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ์ ๋ช ํ ์ ๋ต์ 49๊ฐ์ง ์ ์ค k(k>6)๊ฐ์ ์๋ฅผ ๊ณจ๋ผ ์งํฉ S๋ฅผ ๋ง๋ ๋ค์ ๊ทธ ์๋ง ๊ฐ์ง๊ณ ๋ฒํธ๋ฅผ ์ ํํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, k=8, S={1,2,3,5,8,13,21,34}์ธ ๊ฒฝ์ฐ ์ด ์งํฉ S์์ ์๋ฅผ ๊ณ ๋ฅผ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ์ด 28๊ฐ์ง์ด๋ค. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], โฆ, [3,5,8,13,21,34])
์งํฉ S์ k๊ฐ ์ฃผ์ด์ก์ ๋, ์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ฒซ ๋ฒ์งธ ์๋ k (6 < k < 13)์ด๊ณ , ๋ค์ k๊ฐ ์๋ ์งํฉ S์ ํฌํจ๋๋ ์์ด๋ค. S์ ์์๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฃผ์ด์ง๋ค.
์ ๋ ฅ์ ๋ง์ง๋ง ์ค์๋ 0์ด ํ๋ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ๋ค. ์ด๋, ์ฌ์ ์์ผ๋ก ์ถ๋ ฅํ๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค ์ฌ์ด์๋ ๋น ์ค์ ํ๋ ์ถ๋ ฅํ๋ค.
์ถ์ฒ: https://www.acmicpc.net/problem/6603
ํ์ด
49๊ฐ ์ซ์ ์ค k๊ฐ ํ ํ์ฌ ์์ ์ ํ
k๊ฐ ์ค 6๊ฐ์ฉ ์์๋ก ๊ฐ๋ ๋ถ๋ถ์งํฉ ์ฌ์ ์ ์ถ๋ ฅ
- ์ข ๋ฃ ์กฐ๊ฑด cur == 6
- ์ค๋ณต ์๋๊ณ ์ฌ์ ์์ผ๋ก โ num[cur-1] > val[i]
#include <bits/stdc++.h>
using namespace std;
int k;
int num[6];
int val[50];
int is_used[50];
void func(int cur){
if(cur == 6){
for(int i=0; i<6; i++){
cout << num[i] << ' ';
}
cout << '\n';
return ;
}
for(int i=0; i<k; i++){
if(is_used[i]) continue;
if(cur != 0 && num[cur-1] > val[i]) continue;
is_used[i] = 1;
num[cur] = val[i];
func(cur+1);
is_used[i] = 0;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
while(true){
cin >> k;
if(k == 0) break;
for(int i=0; i<k; i++){
cin >> val[i];
}
func(0);
cout << endl;
}
return 0;
}