专栏文章
CF909C Python Indentation 题解
CF909C题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minhwbcm
- 此快照首次捕获于
- 2025/12/02 02:41 3 个月前
- 此快照最后确认于
- 2025/12/02 02:41 3 个月前
动规题目。设 表示第 个语句缩进 次,如果前一个语句为循环那么这一语句一定在这个循环下面,缩进 次的方案数自然就是前一个语句缩进 次。否则,如果这个语句缩进 次,那么上一个语句一定缩进 次以上,维护一下后缀和即可。
显然空间爆炸,所以需要滚动数组。
代码:
CPP#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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...