20pts求助
查看原帖
20pts求助
1076971
anke2017楼主2024/10/11 17:43

AC On #1,#9。

#include<iostream>

using namespace std;

int siz[100003][4];
int num[100003];
int dp[100004][25][4];

int main()
{
	int n,k;cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		char t;cin>>t;
		switch(t)
		{
			case 'H':siz[i][1]=1;num[i]=1;break;
			case 'S':siz[i][2]=1;num[i]=2;break;
			case 'P':siz[i][3]=1;num[i]=3;break;
		}
	}
	for(int i=n;i>=1;i--)
	{
		for(int j=1;j<=3;j++)
		{
			for(int x=0;x<=k;x++)
			{
				dp[i][x][j]=max(dp[i+1][x][j]+siz[i][j%3+1],dp[i+1][x+1][(num[i]+1)%3+1]+1);
			}
		}
	}
	int ans=0;
	for(int i=0;i<=k;i++)for(int j=1;j<=3;j++)ans=max(ans,dp[1][i][j]);
	cout<<ans;
	return 0;
}
2024/10/11 17:43
加载中...