这道题要衡量换与不换之间的代价,所以不能盲目的将大的换成小的。

#include<stdio.h>
#include<string.h>
int main()
{
    int t,a,b;
    int x,y;
    int n,c1,c0,h;
    char ch[1010];
    scanf("%d",&t);
    for(int i=0;i<t;i++){
        scanf("%d %d %d %d",&n,&c0,&c1,&h);
        x=0,y=0;
        getchar();
        gets(ch);
        a=c1-c0;
        if(a<0){
            a=a*(-1);
        }
        for(int j=0;j<n;j++){
            if(ch[j]=='0')
                x++;
            else if(ch[j]=='1')
                y++;
            }
        if(a>h){
            if(c0>c1)
                    printf("%d\n",n*c1+x*h);
                else
                    printf("%d\n",n*c0+y*h);
        }
        else{
            printf("%d\n",y*c1+x*c0);
        }
    }
    return 0;
}