Codeforces Round #205 (Div. 2) : C
感觉像是一个数位dp,高位的1如果不选的话,前面低位的数都可以选;不然只能选择为1的数;
代码:
1 #include<iostream> 2 #include<algorithm> 3 #define maxn 100005 4 using namespace std; 5 char s[maxn]; 6 int sum[maxn],num[maxn],n,ans,all; 7 8 int main() 9 { 10 cin>>n; 11 for(int i=1;i<=n;i++) 12 cin>>num[i],sum[i]+=sum[i-1]+num[i]; 13 cin>>s; 14 for(int i=n-1;i>=0;i--) 15 { 16 if(s[i]=='0')continue; 17 ans=max(all+sum[i],ans); 18 all+=num[i+1]; 19 } 20 ans=max(all,ans); 21 cout<<ans; 22 return 0; 23 }