题目翻译

有 $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;
}
最后修改:2023 年 04 月 22 日
v我50吃疯狂星期四