Save Flowers
// { Driver Code Starts
#include<bits/stdc++.h>
using namespace std;
class Array
{
public:
template <class T>
static void input(vector<T> &A,int n)
{
for (int i = 0; i < n; i++)
{
scanf("%d ",&A[i]);
}
}
template <class T>
static void print(vector<T> &A)
{
for (int i = 0; i < A.size(); i++)
{
cout << A[i] << " ";
}
cout << endl;
}
};
// } Driver Code Ends
class Solution {
public:
int saveFlowers(int n, vector<int> &arr, string s) {
// vector<int> v(n+1, 0);
int count =0;
for(int i=n-1; i>=0; i--){
if(s[i]=='1'){
count =i;
break;
}
}
int curr_sum =0, flag =1, ans =0, last_element=1000;
for(int i=count; i>=0; i--){
if(s[i]=='1'){
last_element = min(arr[i], last_element);
curr_sum = curr_sum + arr[i];
flag =0;
}else {
if(!flag && last_element < arr[i]){
curr_sum = curr_sum + arr[i] - last_element;
flag = 1;
}
last_element =1000;
}
ans = max(curr_sum, ans);
}
return ans;
}
};
// { Driver Code Starts.
int main(){
int t;
scanf("%d ",&t);
while(t--){
int n;
scanf("%d",&n);
vector<int> arr(n);
Array::input(arr,n);
string s;
getline(cin,s);
Solution obj;
int res = obj.saveFlowers(n, arr, s);
cout<<res<<endl;
}
}
// } Driver Code Ends