题目链接
思路:定义dp[i]为长度为i的字符串能获得的最大值。
#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+1;
typedef long long ll;
const int INF=1e6;
ll dp[maxn];
char s[maxn];
int n,a,b,c;
int main()
{
scanf("%d%d%d%d",&n,&a,&b,&c);
scanf("%s",s+1);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;++i)
{
dp[i]=dp[i-1];
if(i>=4)
{
if(s[i]=='o'&&s[i-1]=='c'&&s[i-2]=='i'&&s[i-3]=='n') dp[i]=max(dp[i],dp[i-4]+a);
}
if(i>=6)
{
if(s[i]=='i'&&s[i-1]=='n'&&s[i-2]=='o'&&s[i-3]=='c'&&s[i-4]=='i'&&s[i-5]=='n') dp[i]=max(dp[i],dp[i-6]+b);
}
if(i>=10)
{
if(s[i]=='i'&&s[i-1]=='n'&&s[i-2]=='o'&&s[i-3]=='c'&&s[i-4]=='i'&&s[i-5]=='n'&&s[i-6]=='o'&&s[i-7]=='c'&&s[i-8]=='i'&&s[i-9]=='n')
dp[i]=max(dp[i],dp[i-10]+c);
}
}
printf("%lld\n",dp[n]);
}