#include<bits/stdc++.h>
using namespace std;
#define all(X) (X).begin(), (X).end()
int32_t main(){
ios::sync_with_stdio(false);
int TC;
cin >> TC;
for(int TCC=1;TCC<=TC;TCC++) {
int n;
cin >> n;
string s;
cin >> s;
if(count(all(s),'1') == 0) {cout<<0<<"\n"; continue;}
vector<int> tab, es;
for(int i=0;i<n;i++) {
if(s[i] == '0') {
int j = i;
while(j < n && s[j] == '0') j++;
if(i == 0 || j == n)
es.push_back(j-i);
else
tab.push_back(j-i);
i = j-1;
}
}
sort(all(tab));
reverse(all(tab));
int res = 0;
for(int c=0;c<(1<<(es.size()));c++) {
int x = 0, saved = 0;
for(int j=0;j<(int)es.size();j++) {
if((c&(1<<j)) && es[j]-x > 0) {
saved += es[j]-x;
x++;
}
}
for(auto a:tab) {
if(a-2*x > 0) {
saved += max(1,a-2*x-1);
x+=2;
}
}
res = max(res,saved);
}
cout<<n-res<<"\n";
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include<bits/stdc++.h> using namespace std; #define all(X) (X).begin(), (X).end() int32_t main(){ ios::sync_with_stdio(false); int TC; cin >> TC; for(int TCC=1;TCC<=TC;TCC++) { int n; cin >> n; string s; cin >> s; if(count(all(s),'1') == 0) {cout<<0<<"\n"; continue;} vector<int> tab, es; for(int i=0;i<n;i++) { if(s[i] == '0') { int j = i; while(j < n && s[j] == '0') j++; if(i == 0 || j == n) es.push_back(j-i); else tab.push_back(j-i); i = j-1; } } sort(all(tab)); reverse(all(tab)); int res = 0; for(int c=0;c<(1<<(es.size()));c++) { int x = 0, saved = 0; for(int j=0;j<(int)es.size();j++) { if((c&(1<<j)) && es[j]-x > 0) { saved += es[j]-x; x++; } } for(auto a:tab) { if(a-2*x > 0) { saved += max(1,a-2*x-1); x+=2; } } res = max(res,saved); } cout<<n-res<<"\n"; } } |
English