티스토리 뷰
https://www.acmicpc.net/problem/12026
d[i] = i까지 오는데 필요한 에너지 양의 최소값 이라고 하자. 매번 0~i-1까지 검사하면서 현재 알파벳 이전에 올 수 있는 알파벳을 찾아서 최소값을 갱신한다. O(N^2)으로 해결할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <cstdio> #include <algorithm> #define INF 987654321 using namespace std; int main() { int n,d[1005]; char s[1005]; scanf("%d %s",&n,s); fill_n(d,1005,INF); d[0]=0; for(int i=1;i<n;i++) for(int j=0;j<i;j++) if((s[i]=='B' && s[j]=='J') || (s[i]=='O' && s[j]=='B') || (s[i]=='J' && s[j]=='O')) d[i]=min(d[i],d[j]+(i-j)*(i-j)); printf("%d",d[n-1]!=INF?d[n-1]:-1); return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
12100 2048 (Easy) (0) | 2018.04.06 |
---|---|
13567 로봇 (0) | 2018.04.02 |
5525 IOIOI (0) | 2018.03.14 |
1107 리모컨 (0) | 2018.03.14 |
2138 전구와 스위치 (0) | 2018.03.14 |