void sol()
{
int n; cin>>n;
dp[1][0]=1; /* i: 行 j: 缩进的空格数 */
for(int i=1;i<=n;i++)
{
char t; cin>>t;
if(t=='f')
{
for(int j=0;j<n;j++)
dp[i+1][j+1]=dp[i][j];
}
else //s
//下一行缩进肯定是小于等于他
{
int sum=0;
for(int j=n-1;j>=0;j--)
{
sum=(sum+dp[i][j])%mod;
dp[i+1][j]=sum;
}
}
}
int ans=0;
for(int j=0;j<n;j++)
ans=(ans+dp[n][j])%mod;
cout<<ans<<endl;
return ;
}
dp题
我们只需要记住
输入‘f’时下一行必然比当前要更缩进一行
输入‘s’时下一行的缩进与当前相等或者是要更靠前,结合代码看看吧