I.nico和niconiconi
题目链接-nico和niconiconi
解题思路
DP,计dp[i]为前i个字符的最大计分分数
附上代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int INF=0x3f3f3f;,
const int N=3e5+5;
typedef pair<int,int> PII;
ll dp[N];
string s;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
ll n,a,b,c;
cin>>n>>a>>b>>c;
cin>>s;
dp[0]=0;
s='p'+s;
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;
}