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;
}