UVALIVE 3516(DP)

2954 단어
제목 링크: UVALIVE 3516
문제풀이 사고방식: 대백서의 문제에서 사고방식은 당연히 모든 상황을 일일이 열거하고 기억화 검색이나 동태 기획을 실현한다.구체적인 방법은 뿌리 결점의 가장 왼쪽의 결점을 일일이 열거하고 오른쪽의 모든 결점의 상황은 임의로 귀속적으로 호출하면 된다.dp[i][j]는 S[i]뿌리 결점의 여러 갈래 나무의 상황을 나타낸다.
코드:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MOD 1000000000

using namespace std;

char st[305];
long long n,dp[305][305];

long long dfs(int i,int j)
{
    if(i>j||i+1==j)
        return dp[i][j]=0;
    if(i==j)
        return dp[i][j]=1;
    if(dp[i][j]!=-1)
        return dp[i][j];
    dp[i][j]=0;
    for(int k=i+2;k<=j;k++)
    {
        if(st[i]==st[k])
        {
            dp[i][j]=(dp[i][j]+dfs(i+1,k-1)*dfs(k,j))%MOD;
        }
    }
    return dp[i][j];
}

int main()
{
    while(~scanf("%s",st))
    {
        n=strlen(st);
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                dp[i][j]=-1;

        dfs(0,n-1);
        printf("%lld
"
,dp[0][n-1]); } return 0; }

좋은 웹페이지 즐겨찾기