본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 10759 팰린드롬 경로 3

by 까망 하르방 2021. 5. 22.
반응형

출처https://www.acmicpc.net/problem/10759

Approach

DP[][] = 문자열이 팰린드롬인 경우의 수

 

▶ 동적계획법(Dynamic Programming, DP) 

 

동적계획법(Dynamic Programming, DP)

동적 계획법(Dynamic Programming)은 큰 의미에서 분할 정복과 같은 접근 방식을 의미한다. 처음 주어진 문제를 더 작은 문제들로 나눈 뒤 각 조각의 답을 계산하고, 이 답들로부터 원래 문제에 대한

zoosso.tistory.com


#include <stdio.h>
#define LL long long
const int MAX_N = 500 + 2;
const int MOD = 1000000007;
inline LL add(LL A, LL B) { return (A % MOD) + (B % MOD); }
int N, DP[MAX_N][MAX_N];
char str[MAX_N][MAX_N + 1];

void init()
{
    for (int i = 0; i <= N; ++i)
    {
        for (int j = 0; j <= N; ++j)
        {
            DP[i][j] = 0;
            str[i][j] = '\0';
        }
    }
}

void input()
{
    scanf("%d", &N);
    init();
    for (int i = 0; i < N; i++) {
        scanf("%s", str[i]);
        DP[i][i] = 1;
    }
}

int main() {
    // freopen("input.txt", "r", stdin);
    input();
    for (int i = N - 2; i >= 0; i--)
    {
        for (int j = 0; j <= i; j++)
        {
            for (int k = 0; k <= i; k++)
            {
                if (str[i - j][j] != str[N - 1 - k][N - 1 - i + k])
                    DP[j][k] = 0;
                else
                    DP[j][k] = add(DP[j][k] + DP[j + 1][k + 1], DP[j + 1][k] + DP[j][k + 1]) % MOD;
            }
        }
    }
    printf("%d\n", DP[0][0]);
    
    return 0;
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 21609 상어 중학교  (4) 2021.05.23
[BOJ] 백준 21608 상어 초등학교  (0) 2021.05.23
[BOJ] 백준 3020 개똥벌레  (0) 2021.05.16
[BOJ] 백준 15829 Hashing  (0) 2021.05.10
[BOJ] 백준 15666 N과 M(12)  (0) 2021.05.09

댓글