http://codeforces.com/problemset/problem/632/B
n个物品,每个物品有一个值且一个物品属于A或属于B。
现在选择一个前缀或者后缀,将A改成B,将B改成A。
求属于B的物品的值最多是多少?
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int n;
int a[maxn];
string s;
long long suf[maxn];
long long pre[maxn];
long long sum,ans;
int main(){
cin >> n;
for (int i=1;i<=n;i++){
cin >> a[i];
}
cin >> s;
for (int i=0;i<n;i++){
if (s[i]=='B') ans+=a[i+1];
}
pre[0]=ans;
suf[n+1]=ans;
for (int i=1;i<=n;i++){
if (s[i-1]=='A') pre[i]=pre[i-1]+a[i];
else pre[i]=pre[i-1]-a[i];
ans=max(ans,pre[i]);
}
for (int i=n;i>=1;i--){
if (s[i-1]=='A') suf[i]=suf[i+1]+a[i];
else suf[i]=suf[i+1]-a[i];
ans=max(ans,suf[i]);
}
cout << ans << endl;
}