首先遍历字符串得出1和0的个数,然后比较两者的价格以及转换的价格计算最小值。
共有5种情况:1. 0和1的价格一样,就没必要转换直接计算。2. 0的价格大于1的价格且大于1加转换的价格,这样可以将0全部转化为1,总价格最小。3.0的价格大于1的价格但小于1加转换的价格,这样就没必要转换直接计算。第4和第5种情况就是2.和3.的相反。
#include<stdio.h> int main() { int t,i; scanf("%d",&t); while(t--) { int n,c1,c2,h,num0=0,num1=0,sum; scanf("%d%d%d%d",&n,&c1,&c2,&h); char a[n+1]; scanf("%s",a); for(i=0;i<n;i++) { if(a[i]=='0') num0++; if(a[i]=='1') num1++; } if(c1==c2) sum=num0*c1+num1*c2; if(c1>c2) { if(c1>=c2+h) sum=num0*h+n*c2; if(c1<c2+h) sum=num0*c1+num1*c2; } if(c1<c2) { if(c2>=c1+h) sum=num1*h+n*c1; if(c2<c1+h) sum=num0*c1+num1*c2; } printf("%d\n",sum); } return 0; }
全部评论
(0) 回帖