CF909C Python Indentation 题解
动规题目。设
显然空间爆炸,所以需要滚动数组。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e3 + 5, mod = 1e9 + 7;
int n, dp[N], p, res, dp2[N];
char s[N];
signed main()
{
cin >> n;
dp2[0] = 1;
for (int i = 1; i <= n; i ++ )
{
char c;
cin >> c;
s[i] = c;
}
for (int i = 1; i <= n; i ++ )
{
if (s[i - 1] != 'f')
{
for (int j = p; j >= 0; j -- ) dp[j] = (dp[j] + dp[j + 1] + dp2[j]) % mod;
}
else
{
for (int j = ++ p; j >= 1; j -- ) dp[j] = dp2[j - 1];
}
for (int j = 0; j <= p; j ++ ) dp2[j] = dp[j], dp[j] = 0;
}
for (int i = 0; i <= p; i ++ ) res = (res + dp2[i]) % mod;
cout << res << endl;
return 0;
}