ACODE - spoj:建议我的方法可能出错

时间:2016-05-17 12:49:49

标签: dynamic-programming top-down

我从spoj尝试了这个问题ACODE。如果你可以建议我,我的方法可能有什么问题! 链接到问题:http://www.spoj.com/problems/ACODE/

我的方法:

typedef long long ll;
ll dp[27][3];

ll acode(char *A,int n,int k)
{
    if(k==0)
    {
        ll x,y;
        x=acode(A,n,1);
        y=acode(A,n,2);
        return (x+y);
    }
    if(n<0)
        return 0;
    else if(n==0)
    {
        if(k==1)
            return 1;
        else
            return 0;
    }
    if(dp[n][k] != 0)
        return dp[n][k];
    int m;
    if(k==1)
        m=A[n]-'0';
    else
        m=10*(A[n-1]-'0')+(A[n]-'0');
    if(m<27 && m!=0)
    {
        if(k==1)
            dp[n][k] = acode(A,n-1,1)+acode(A,n-1,2);
        else
            dp[n][k] = acode(A,n-2,1)+acode(A,n-2,2);
    }
    return dp[n][k];
}

int main()
{
    char A[5001];
    cin>>A;
    cout<<A;
    while(strcmp(A,0))
    {   
        int l = strlen(A);
        cout<<acode(A,l-1,0)<<endl;
        cin>>A;
    }
    return 0;
}

使用自上而下的DP.Memoization为k = 1或k = 2的每个索引值。

0 个答案:

没有答案