题解:AT_cpsco2019_s1_c Coins
lailai0916 · · 题解
题意简述
有
给定
解题思路
对于价格的每一位,为了让使用硬币的个数尽可能少,显然最优方案是使用相同位数的硬币。
我们将相同位数以
设某位上的值为
- 若
x<5 ,使用x 个硬币 A 即可; - 若
x\ge5 ,将5 个硬币 A 换成1 个硬币 B,可节省4 个硬币。
数据范围
参考代码
#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=35;
int n,k,ans=inf;
int a[N];
void f(int u,int t,int s)
{
if(t==k)
{
int sum=0;
while(s)
{
if(s%10>=5)sum-=4;
sum+=s%10;
s/=10;
}
ans=min(ans,sum);
return;
}
if(u>n)return;
for(int i=0;i<2;i++)
{
if(t+i>k)continue;
f(u+1,t+i,s+i*a[u]);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
f(1,0,0);
cout<<ans<<'\n';
return 0;
}