题目地址:https://ac.nowcoder.com/acm/contest/3002/I
思路
题解很清楚了
边界dp[0] = 0;
代码
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int maxn=3e5+10;
ll dp[maxn];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string s,t;
ll n, a, b, c;
cin >> n >> a>> b >> c;
s.resize(1);
s[0] = 'w';
cin >> t;
s+=t;
for (int i=1; i<=n; i++){
if (i >= 4 && s.substr(i - 3, 4) == "nico")
dp[i] = max(dp[i], dp[i - 3] + a);
if (i >= 6 && s.substr(i - 5, 6) == "niconi")
dp[i] = max(dp[i], dp[i - 5] + b);
if (i >= 10 && s.substr(i - 9, 10) == "niconiconi")
dp[i] = max(dp[i], dp[i - 9] + c);
dp[i] = max(dp[i], dp[i - 1]);
}
cout << dp[n] << endl;
return 0;
}