#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,c0,c1,h;
cin>>n>>c0>>c1>>h;
string s;
cin>>s;
int cnt0=0;
int cnt1=0;
for(int i=0;i<n;i++)
{
if(s[i]=='0')
cnt0++;
if(s[i]=='1')
cnt1++;
}
int ans=cnt0*c0+cnt1*c1;
int k0=cnt0;
int k1=cnt1;
int hh = h;
while(k0--)
{
k1++;
int sum=k0*c0+c1*k1;
ans=min(ans,sum+hh);
hh+=h;
}
hh = h;
while(cnt1--)
{
cnt0++;
int sum=cnt0*c0+cnt1*c1;
ans=min(ans,sum+hh);
hh+=h;
}
cout<<ans<<endl;
}
return 0;
}
大佬代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
typedef vector<ll> vi;
int main(){
ios_base::sync_with_stdio(false);
ll t;cin>>t;
while(t--){
ll n,c0,c1,h;cin>>n>>c0>>c1>>h;
string s;cin>>s;
ll len=s.size();
ll n0=count(s.begin(),s.end(),'0');
ll n1=count(s.begin(),s.end(),'1');
cout<<min(n0*c0+n1*c1,min(len*c1+n0*h,n1*h+len*c0))<<endl;
}
return 0;
}
Python部分
不知道为啥会Runtime error
t = int(input())
while t > 0:
# 输入四个数
n, c0, c1, h = map(int, input().split())
# 输入字符串
s = str(input())
# 记录出现的0和1的个数
cnt0 = cnt1 = 0
# 存储每次修改后的花费
sumo = 0
# 遍历找个数
for i in range(0, n):
if s[i] == '0':
cnt0 += 1
else:
cnt1 += 1
ans = cnt0 * c0 + cnt1 * c1
# 保存一下
k0 = cnt0
k1 = cnt1
# 每次修改h的值
hh = h
while k0 > 0:
k0 -= 1
k1 += 1
sumo = k0 * c0 + k1 * c1
ans = min(sumo + hh, ans)
hh += h
# 每次修改h的值
hh = h
while cnt1 > 0:
cnt1 -= 1
cnt0 += 1
sumo = cnt0 * c0 + cnt1 * c1
ans = min(sumo + hh, ans)
hh += h
print(ans)
那些一行两行的我就先不保存了,,,看不懂,保存一个这个:
t=int(input())
for tt in range(t):
n,c0,c1,h=[int(x) for x in input().split(' ')]
a=[(x=='1') for x in input()]
tot0=a.count(0)
tot1=a.count(1)
p0=min(c0,h+c1)
p1=min(c1,h+c0)
print((tot0*p0)+(tot1*p1))