思路:动态规划
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Arrays;
public class Main {
//快速输入
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//快速输出
static PrintWriter pw=new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] s=br.readLine().split(" ");
int n=Integer.parseInt(s[0]);
long a=Integer.parseInt(s[1]);
long b=Integer.parseInt(s[2]);
long c=Integer.parseInt(s[3]);
String str=br.readLine();
//abc有10^9,所以需要用long
long[] dp=new long[n+1];
long ans=0;
for(int i=4;i<=n;i++) {
//此时的字符串为str的下标从0到i,不包括i
//最后一个字符串不计分
dp[i]=dp[i-1];
//最后一个字符串为"nico"
if(i>3) {
if(str.substring(i-4, i).equals("nico")) {
dp[i]=Math.max(dp[i], dp[i-4]+a);
}
}
//最后一个字符串为"niconi"
if(i>5) {
if(str.substring(i-6, i).equals("niconi")) {
dp[i]=Math.max(dp[i], dp[i-6]+b);
}
}
//最后一个字符串为"niconiconi"
if(i>9) {
if(str.substring(i-10, i).equals("niconiconi")) {
dp[i]=Math.max(dp[i], dp[i-10]+c);
}
}
//更新答案
ans=Math.max(ans, dp[i]);
}
pw.println(ans);
pw.flush();
}
}