我是如何想到用最简单易懂的解法的

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
ll a,b,c;//范围是1e9,但相加就要超,所以用ll 
ll f[300010]={0};
char s[300010];
int main(){
    scanf("%d%lld%lld%lld",&n,&a,&b,&c);
    scanf("%s",s);
    //贪心,每一个位置的最大分数 
    for(int i=1;i<=n;i++){
        f[i]=max(f[i],f[i-1]);
        if(s[i-1]=='n' && s[i]=='i' && s[i+1]=='c' && s[i+2]=='o'){
            f[i+3]=max(f[i+3],f[i-1]+a);
            if(s[i+3]=='n' && s[i+4]=='i'){
                f[i+5]=max(f[i+5],f[i-1]+b);
                if(s[i+5]=='c' && s[i+6]=='o' && s[i+7]=='n' && s[i+8]=='i')
                    f[i+9]=max(f[i+9],f[i-1]+c);
            }
        }
    }
    printf("%lld",f[n]);
    return 0;
}