题意:
在一个由男生和女生组成的队中,每一秒如果一个男生在一个女生的前面,
他们就会互换位置。求女生全换到最前面用的最少时间。
DP转移方程: ans=max(ans+1,pre); pre是从后往前到当前位置时的女生数
意思是在当前如果是男生并且该 男生后面有女生的存在,则选取
之前的最大时间再加一个或是后面女生数中最大的一个
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int i,j,k;
string s;
cin>>s;
int ans=0;
int pre=0;
for (i=s.size()-1;i>=0;i--)
{
if (s[i]=='F')
pre++;
else if (pre)
ans=max(ans+1,pre);
}
cout<<ans<<endl;
return 0;
}
There are n schoolchildren, boys and girls, lined up in the school canteen in front of the bun stall. The buns aren't ready yet and the line is undergoing some changes.
Each second all boys that stand right in front of girls, simultaneously swap places with the girls (so that the girls could go closer to the beginning of the line). In other words, if at some time the i-th position has a boy and the (i + 1)-th position has a girl, then in a second, the i-th position will have a girl and the (i + 1)-th one will have a boy.
Let's take an example of a line of four people: a boy, a boy, a girl, a girl (from the beginning to the end of the line). Next second the line will look like that: a boy, a girl, a boy, a girl. Next second it will be a girl, a boy, a girl, a boy. Next second it will be a girl, a girl, a boy, a boy. The line won't change any more.
Your task is: given the arrangement of the children in the line to determine the time needed to move all girls in front of boys (in the example above it takes 3 seconds). Baking buns takes a lot of time, so no one leaves the line until the line stops changing.
The first line contains a sequence of letters without spaces s1s2... sn (1 ≤ n ≤ 106), consisting of capital English letters M and F. If lettersi equals M, that means that initially, the line had a boy on the i-th position. If letter si equals F, then initially the line had a girl on the i-th position.
Print a single integer — the number of seconds needed to move all the girls in the line in front of the boys. If the line has only boys or only girls, print 0.
MFM
1
MMFF
3
FFMMM
0
In the first test case the sequence of changes looks as follows: MFM → FMM.
The second test sample corresponds to the sample from the statement. The sequence of changes is: MMFF → MFMF → FMFM → FFMM.