冬アルゴリズムベースキャンプ1 Iニコとniconiconi(単純DP)オフ2020頭の牛

タイトルリンク
アイデア: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