传送门
题意:
思路:
最优策略肯定是每次选最多的连续的1,不然会被别人选走
把字符串整理一下,连续的0或1整理的一块,从连续1最多的选即可
代码:
int t,n;
int a[150];
int b[150];
int c[150];
int main()
{
std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
string x;
cin>>x;
n=x.size();
for(int i=0;i<n;i++){
if(x[i]=='1')a[i+1]=1;
else a[i+1]=0;
}
int tmp=0,cnt=0;
tmp=a[1];
rep(i,2,n){
if(a[i]!=a[i-1]){
b[++cnt]=tmp;
tmp=a[i];
}else tmp+=a[i-1];
}
b[++cnt]=tmp;
// for(int i=1;i<=cnt;i++)cout<<b[i]<<" ";
// cout<<endl;
int ans=0;
int f=0;
for(int i=1;i<=cnt;i++){
if(b[i]!=0)c[++f]=b[i];
}
sort(c+1,c+f+1);//c数组放的是连续的1
int k=0;
for(int i=f;i>=1;i--){
k++;
if(k&1)ans+=c[i];
}
cout<<ans<<endl;
}
return 0;
}