cf909c C. Python Indentation dp滚动

考虑当前层数

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>

int n;
long long mod=1e9+7;

long long dp[2][5005];
long long sum[2][5005];

char ch[5005];
int cur;
int main() {

    while(~scanf("%d",&n))
    {
        //getchar();
        ch[0]=' ';
        for(int i=1;i<=n;i++)
        {
            getchar();
            scanf("%c",&ch[i]);
        }
        memset(dp,0,sizeof(dp));
        memset(sum,0,sizeof(sum));

        dp[0][1]=1;
        for(int i=1;i<=5002;i++)
        {
            sum[0][i]=(sum[0][i-1]+dp[0][i])%mod;
        }

        cur=1;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                //if (ch[i] == 's')
                {
                    if(ch[i-1]=='f')
                    {
                        dp[cur][j]=dp[cur^1][j-1]%mod;
                    }
                    else
                    {
                        dp[cur][j]=(sum[cur^1][n]-sum[cur^1][j-1])%mod;
                    }
                }
                sum[cur][j]=(sum[cur][j-1]+dp[cur][j])%mod;
            }
            cur^=1;
        }

        printf("%lld\n",(sum[cur^1][n]+mod)%mod);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/c_czl/article/details/88222804