0%

Starters 188-Swaps in a String

思路讲解

我感觉可以搞dp(结果看了第二个样例觉得不太行)。

那么其实就是局部最优可以推得全局最优,非常经典的贪心。

那么为什么说这个B朝右朝左选一个最大的就最优了?不会相互影响吗?

image

那我们来看一个你认为会相互影响的,可以看到,这个是矛盾的。所以不会相互影响

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
FOR(i,1,N){
++cnt[S[i]-'A'];
if(S[i]=='B'){
L[i]=cnt[0];
}else if(S[i]=='C'){
cnt[0]=0;
}else{

}
}
cnt.assign(10,0);
ROF(i,N,1){
++cnt[S[i]-'A'];
if(S[i]=='B'){
R[i]=cnt[2];
}else if(S[i]=='A'){
cnt[2]=0;
}else{

}
}
FOR(i,1,N){
if(S[i]=='B'){
ans+=max(L[i],R[i]);
}
}

AC代码

https://www.codechef.com/viewsolution/1167971455

心路历程(WA,TLE,MLE……)

写了一个下午,一直WA,思路错了。