skfjh

 

D

题目:https://vjudge.net/contest/436484#problem/D

通过将0和1的转换使得和最小

注意:每转换一次就要额外支付硬币且每一组数据都要支付n*c0或n*c1的硬币

#include<stdio.h>
int main()
{
    int t,a,n,c1,c0,h;
    char s[1005];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d",&n,&c0,&c1,&h);
        int ans=0,cnt=0;//分别储存0和1的硬币 
        scanf("%s",&s);
        a=c0-c1;//判断c0和c1的大小 
        if(a<0)
        {
            a=a*(-1);
        }
        for(int i=0;i<n;i++)//计算二进制字符串中0和1的数量 
        {
            if(s[i]-'0'==0)
            {
                ans++;
            }else cnt++;
        }
        if(a>h)
        {
            if(c0>c1)
            {
                printf("%d\n",n*c1+ans*h);//j将0转换成1 
            }else printf("%d\n",n*c0+cnt*h);
        }
        else
        {
            printf("%d\n",cnt*c1+ans*c0);
        }
    }
    return 0;
}

 

posted on 2021-05-04 16:56  skfjh  阅读(48)  评论(0)    收藏  举报

导航