vva 1362 - Exploring Pyramids(구간 dp)

4184 단어

제목 연결: uva 1362 - Exploring Pyramids


제목 대의: 몇 종류의 다차수덕 전 서열이 있는지 묻는다. (이곳은 한 노드를 지나갈 때마다 이 노드의 값은 계산되고 거슬러 올라가도) 이 문자열을 만족시켜야 한다.
문제풀이 사고방식: dp[i][j]는 i에서 j까지의 위치를 몇 가지 다차원 나무로 표시할 수 있는지 나타낸다.전이 방정식: dp[i][j]=∑k=i+2jdp[i+1][k-1]∗dp[k][j].
#include <cstdio>
#include <cstring>

typedef long long ll;
const int N = 305;
const ll MOD = 1e9;

char s[N];
ll dp[N][N];

ll solve (int x, int y) {

    if (x == y)
        return dp[x][y] = 1;

    if (s[x] != s[y])
        return dp[x][y] = 0;

    ll& ans = dp[x][y];

    if (ans >= 0)
        return ans;
    ans = 0;

    for (int i = x+2; i <= y; i++) {
        if (s[x] == s[i])
            ans = (ans + solve(x+1, i-1) * solve(i, y))%MOD;
    }
    return ans;
}

int main () {
    while (scanf("%s", s) == 1) {
        memset(dp, -1, sizeof(dp));
        printf("%lld
"
, solve(0, strlen(s)-1)); } return 0; }

좋은 웹페이지 즐겨찾기