nico和niconiconi
nico和niconiconi
https://ac.nowcoder.com/acm/contest/3002/I
nico和niconiconi
https://ac.nowcoder.com/acm/contest/3002/I
本次使用动规dp
(每一步对于之前都是最优,可以从局部入手)
开个数组dp存储“成本”
#pragma warning (disable :4996)
#include <iostream>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll modd = 1e9 + 7;
const int INF = 0xffffff;
ll dp[300010];
string S;
int main()
{
int n, a, b, c;
scanf("%d %d %d %d", &n, &a, &b, &c);
getchar();
cin >> S;
for (int i = 0; i < n; i++) {
if (i > 0)
dp[i] = dp[i - 1];
if (i >= 3) {
if (S.substr(i - 3, 4) == "nico")
dp[i] = max(dp[i], dp[i - 3] + a);
}
if (i >= 5) {
if (S.substr(i - 5, 6) == "niconi")
dp[i] = max(dp[i], dp[i - 5] + b);
}
if (i >= 9) {
if (S.substr(i - 9, 10) == "niconiconi")
dp[i] = max(dp[i], dp[i - 9]+c);
}
}
cout << dp[n - 1] << endl;
}