题目链接:点击这里
令
代表前
个字符的计数最大值。
#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int MOD = 10000007;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const int maxn = 300010;
int n, a, b, c;
string s;
ll dp[maxn];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>a>>b>>c;
cin>>s;
for(int i = 0; i < n; ++i)
{
if(i>0)
dp[i] = dp[i-1];
if(i>=3&&s.substr(i-3,4)=="nico")
dp[i] = max(dp[i], dp[i-3]+a);
if(i>=5&&s.substr(i-5,6)=="niconi")
dp[i] = max(dp[i], dp[i-5]+b);
if(i>=9&&s.substr(i-9,10)=="niconiconi")
dp[i] = max(dp[i], dp[i-9]+c);
}
cout<<dp[n-1]<<endl;
return 0;
}