链接:https://www.nowcoder.com/acm/contest/70/E
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
const int mx = 55;
const int inf = 0x3f3f3f3f;
//const int mod = 1e9 + 7;
using namespace std;
int dp[2][55][105]; //方向, 修改次数,指令数
char str[105];
int main(){
int len,n,dir;
int ans1, ans2;
scanf("%s",str+1);
scanf("%d",&n);
memset(dp,-inf,sizeof(dp));
// cout<<dp[0][0][0]<<endl;
len = strlen(str+1);
dp[1][0][0] = 0;
//dir = 1;
for(int i = 1; i <= len; i++)
if(str[i]=='T'){
dp[1][0][i] = dp[0][0][i-1];
dp[0][0][i] = dp[1][0][i-1];
}
else{
dp[1][0][i] = dp[1][0][i-1]+1;
dp[0][0][i] = dp[0][0][i-1]-1;
}
//cout<<dp[1][0][1]<<endl;
for(int j = 1; j <= n; j++) //修改次数
for(int k = 1; k <= len; k++) //指令长度
if(str[k] == 'F'){
dp[0][j][k] = max(dp[1][j-1][k-1],dp[0][j][k-1]-1);
dp[1][j][k] = max(dp[0][j-1][k-1],dp[1][j][k-1]+1);
}
else{
dp[0][j][k] = max(dp[1][j][k-1],dp[0][j-1][k-1]-1);
dp[1][j][k] = max(dp[0][j][k-1],dp[1][j-1][k-1]+1);
}
if(dp[0][n][len] <-100)
ans1 = dp[1][n][len];
else
ans1 = dp[0][n][len];
memset(dp,inf,sizeof(dp)); // 左边
dp[1][0][0] = 0;
for(int i = 1; i <= len; i++)
if(str[i]=='T'){
dp[1][0][i] = dp[0][0][i-1];
dp[0][0][i] = dp[1][0][i-1];
}
else{
dp[1][0][i] = dp[1][0][i-1]+1;
dp[0][0][i] = dp[0][0][i-1]-1;
}
for(int j = 1; j <= n; j++) //修改次数
for(int k = 1; k <= len; k++) //指令长度
if(str[k] == 'F'){
dp[0][j][k] = min(dp[1][j-1][k-1],dp[0][j][k-1]-1);
dp[1][j][k] = min(dp[0][j-1][k-1],dp[1][j][k-1]+1);
}
else{
dp[0][j][k] = min(dp[1][j][k-1],dp[0][j-1][k-1]-1);
dp[1][j][k] = min(dp[0][j][k-1],dp[1][j-1][k-1]+1);
}
if(dp[0][n][len] >100)
ans2 = dp[1][n][len];
else
ans2 = dp[0][n][len];
// cout<<ans1<<",,,"<<-ans2<<endl;
cout<<max(ans1, -ans2)<<endl;
return 0;
}