文章
3
粉丝
25
获赞
0
访问
2.4k
很简单的递推,假设我们有一个长度为五的00000串,我们想求该串可能出现的情况数,首先我们将串一分为二,将其分为00和000两个串,此时用左侧串长的情况数乘以右侧串长的一部分就可以得到一部分的答案,我们还得考虑不将其分为两部分,而是中间的两个00合并,原本长度为5的串就变成了0100,我们以1为划分,再将其分为两部分0和00,此时将这两种情况数相乘即可得到另一部分答案,将两部分答案相加就得到了总答案。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
#define maxn 10000+10
#define inf 0x3f3f3f3f
#define ll long long
int n;
int a[maxn];
int main() {
// freopen("1.txt","r",stdin);
cin>>n;
a[1]=1;
a[2]=2;
a[0]=1;
for(int i=3;i<=n;i++){
int mid=i/2;
a[i]=((a[i-mid]%2333333)*(a[mid]%2333333))+((a[i-mid-1]%2333333)*(a[mid-1]%2333333));
a[i]%=2333333;
}
cout<<a[n];
return 0;
}
登录后发布评论
暂无评论,来抢沙发