Codeforces Round #597 (Div. 2) C dp
Posted crossea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #597 (Div. 2) C dp相关的知识,希望对你有一定的参考价值。
设dpi为前面长度为i的字符串的所有可能组合,如果 s[i]==s[i-1]并且s[i]∈{u,n}
那么dp[i]=dp[i-1]+dp[i-2]否则dp[i]=dp[i-1],最后结果就是dp[s[i].length]
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
#define rep(i,j,k) for(LL i=(j); i<(k); ++i)
#define pb push_back
#define PII pair<LL,LL>
#define PLL pair<long long, long long>
#define ini(a,j) memset(a,j,sizeof a)
#define rrep(i,j,k) for(LL i=j; i>=k; --i)
#define fi first
#define se second
#define LL long long
#define beg begin()
#define ed end()
#define all(x) x.begin(),x.end()
const LL mod= 1e9+7;
const unsigned int N = 1e5+10;
string s;
LL dp[N];
int main(int argc, char const *argv[])
{
// #define DEBUG
#ifdef DEBUG
freopen("1.dat","r",stdin);
freopen("ans.dat","w",stdout);
#endif
LL _=1;
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// cin>>_;
while(_--){
cin>>s;
if(count(all(s),‘m‘)!=0||count(all(s),‘w‘)!=0)
cout<<0<<endl;
else{
int n = s.length();
dp[0]=1;
dp[1]=1;
// for(int i=)
rep(i,1,n)
{
if(s[i]==‘n‘&&s[i-1]==‘n‘)
dp[i+1]=dp[i]+dp[i-1];
else if(s[i]==‘u‘&&s[i-1]==‘u‘)
dp[i+1]=dp[i]+dp[i-1];
else
dp[i+1]=dp[i];
dp[i+1] %= mod;
}
cout<<dp[n]%mod<<endl;
}
}
return 0;
}
以上是关于Codeforces Round #597 (Div. 2) C dp的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid
codeforces Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid
Codeforces Round #597 (Div. 2) A. Good ol' Numbers Coloring
Codeforces Round #597 (Div. 2) E. Hyakugoku and Ladders 概率dp