题目翻译
有 $9$ 种数字,$1,2,\dots9$。
数字 $i$ 可以花 $c_i$ 的价格购买,你有 $n$ 元。
最后输出你购买的数字拼成的最大值。
题目思路
我们考虑,先让位数最大。
然后,再最大化最高位、次高位、次次高位,一直往下。
最大位数,即为用 $n$ 除以最便宜的价钱。
然后,你可能会有剩余的钱。
剩余的,我们开始置换。
从 $9$ 开始枚举,能换就换,并输出你置换的数字。
这样最大化了较高位,还保证位数没有变少。
具体可以品味下代码。
主要代码
int c[20];
int main()
{
int n, mnc = INT_MAX, maxn;
cin >> n;
for (int i = 1; i <= 9; i++)
{
cin >> c[i];
if (c[i] <= mnc)
{
mnc = c[i];
maxn = i;
}
}
int cnt = n / mnc;
int x = 0, cnt2 = 0;
int s = n - cnt * mnc;
for (int i = 9; i >= 1; i--)
{
if (i > maxn)
{
if (c[i] - mnc <= s)
{
cnt2 = s / (c[i] - mnc);
cnt -= cnt2;
s%=c[i] - mnc;
for (int j = 1; j <= cnt2; j++)
{
cout << i;
}
}
}
}
for (int i = 1; i <= cnt; i++)
{
cout << maxn;
}
return 0;
}