贪心,负数为搞成0不选即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
const int maxm=110000;
ll a[maxm],sum[maxm];
char s[maxm];
ll x=0;
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",a+i);
sum[i]=sum[i-1];
sum[i]+=max(a[i],x);
}
scanf("%s",s+1);
int len=strlen(s+1);
ll c=0,ans=0;
for(int i=len;i>=1;i--)
if(s[i]=='1')
{
ans=max(ans,c+sum[i-1]);
c+=max(a[i],x);
}
printf("%lld ",max(ans,c));
}