2020牛客寒假算法基础集训营1 I nico和niconiconi (简单DP)

题目链接
思路:定义dp[i]为长度为i的字符串能获得的最大值。

#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+1;
typedef long long ll;
const int INF=1e6;
ll dp[maxn];
char s[maxn];
int n,a,b,c;
int main()
{
	scanf("%d%d%d%d",&n,&a,&b,&c);
	scanf("%s",s+1);
	memset(dp,0,sizeof(dp));
	for(int i=1;i<=n;++i)
	{
		dp[i]=dp[i-1];
		if(i>=4)
		{
			if(s[i]=='o'&&s[i-1]=='c'&&s[i-2]=='i'&&s[i-3]=='n') dp[i]=max(dp[i],dp[i-4]+a);
		}
		if(i>=6)
		{
			if(s[i]=='i'&&s[i-1]=='n'&&s[i-2]=='o'&&s[i-3]=='c'&&s[i-4]=='i'&&s[i-5]=='n') dp[i]=max(dp[i],dp[i-6]+b);
		}
		if(i>=10)
		{
			if(s[i]=='i'&&s[i-1]=='n'&&s[i-2]=='o'&&s[i-3]=='c'&&s[i-4]=='i'&&s[i-5]=='n'&&s[i-6]=='o'&&s[i-7]=='c'&&s[i-8]=='i'&&s[i-9]=='n')
			dp[i]=max(dp[i],dp[i-10]+c);
		}
	 } 
	 printf("%lld\n",dp[n]);
}
发布了70 篇原创文章 · 获赞 0 · 访问量 2436

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104187856