티스토리 뷰
https://www.acmicpc.net/problem/12969
12969번: ABC
첫째 줄에 문제의 조건을 만족하는 문자열 S를 출력한다. 가능한 S가 여러 가지라면, 아무거나 출력한다. 만약, 그러한 S가 존재하지 않는 경우에는 -1을 출력한다.
www.acmicpc.net
d[i][a][b][p] = 길이가 i이고, A의 개수가 a개, B의 개수가 b개, S[i]<S[j] 쌍이 p개 있는 문자열이 가능한가?
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
|
#include <cstdio>
bool d[31][31][31][400];
char ans[31];
int n,k;
bool go(int i,int a,int b,int p)
{
if(i==n) return p==k;
if(d[i][a][b][p]) return false;
d[i][a][b][p]=true;
ans[i]='A';
if(go(i+1,a+1,b,p)) return true;
ans[i]='B';
if(go(i+1,a,b+1,p+a)) return true;
ans[i]='C';
if(go(i+1,a,b,p+a+b)) return true;
return false;
}
int main()
{
scanf("%d %d",&n,&k);
printf("%s",go(0,0,0,0)?ans:"-1");
return 0;
}
|
cs |
'Algorithm > BOJ' 카테고리의 다른 글
11049 행렬 곱셈 순서 (0) | 2019.10.16 |
---|---|
2133 타일 채우기 (0) | 2019.10.13 |
1328 고층 빌딩 (0) | 2019.10.13 |
10942 팰린드롬? (0) | 2019.10.12 |
1890 점프 (0) | 2019.10.12 |