比赛的时候居然没看出来是贪心..
就是让最前面的0和最后面的1交换
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define inf 10000000;
using namespace std;
char ss[100001];
int pos[100001];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int x,y;
scanf("%d%d",&x,&y);
scanf("%s",ss);
int b=strlen(ss);
int zz=0;
for(int i=0; i<b; i++)
{
if(ss[i]=='1')
pos[zz++]=i;
}
zz--;
int sum=0;
for(int i=0; i<b; i++)
{
if(ss[i]=='0')
{
if(pos[zz]<i)
{
break;
}
//printf("%d..\n",pos[zz]);
sum+=min(y,x*(pos[zz--]-i));
}
}
printf("%d\n",sum);
}
}