牛客 nico和niconiconi(字符串、DP)

题目链接:点击这里
在这里插入图片描述
在这里插入图片描述
d p [ i ] dp[i] 代表前 i i 个字符的计数最大值。

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>

using namespace std;
typedef long long ll;
const int MOD = 10000007;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const int maxn = 300010;
int n, a, b, c;
string s;
ll dp[maxn];

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin>>n>>a>>b>>c;
	cin>>s;
	
	for(int i = 0; i < n; ++i)
	{
		if(i>0)
			dp[i] = dp[i-1];
		if(i>=3&&s.substr(i-3,4)=="nico")
			dp[i] = max(dp[i], dp[i-3]+a);
		if(i>=5&&s.substr(i-5,6)=="niconi")
			dp[i] = max(dp[i], dp[i-5]+b);
		if(i>=9&&s.substr(i-9,10)=="niconiconi")
			dp[i] = max(dp[i], dp[i-9]+c);
	}
	
	cout<<dp[n-1]<<endl;	
	return 0;
}
发布了727 篇原创文章 · 获赞 111 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/104221497