Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- using namespace std;
- int solve(vector<int>& a, vector<int>& prefix, vector<int>& m, int k){
- if (k==m.size()-1){
- //int x=max(a[m[k]], prefix[m[k]]);
- //cout<<k<<" "<<x<<"\n";
- return max(a[m[k]], prefix[m[k]]);
- }
- //int x=max(prefix[m[k]], a[m[k]]+solve(a, prefix, m, k+1));
- //cout<<k<<" "<<x<<"\n";
- return max(prefix[m[k]], a[m[k]]+solve(a, prefix, m, k+1));
- }
- signed main(){
- int n;
- cin>>n;
- vector<int> a(n);
- for (int i=0; i<n; i++){
- cin>>a[i];
- }
- string s;
- cin>>s;
- int t=(int) s.size();
- reverse(s.begin(), s.end());
- vector<int> m;
- for (int i=0; i<t; i++){
- if (s[i]=='1'){
- m.push_back(t-1-i);
- }
- }
- if (m.size()==0){
- cout<<0<<"\n";
- return 0;
- }
- vector<int> prefix(n+1);
- for (int i=1; i<=n; i++){
- prefix[i]=prefix[i-1]+a[i-1];
- }
- int ans=solve(a, prefix, m, 0);
- cout<<ans<<"\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement