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; }
浙公网安备 33010602011771号