티스토리 뷰

Algorithm/BOJ

12969 ABC

henry1214 2019. 10. 13. 17:09

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
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday