牛客练习赛20-F-填数字(模拟)

题目描述 

托米发现了一种新的游戏--填数字!
每填写一次数字(1≤ i≤9)需要花费ai枚金币,托米总共有n枚金币.

托米想知道他能得到的最大数字是多少.

如果填不了请输出-1。

不需要用完所有金币

输入描述:

第一行一个数字n,表示金币总数.
第二行9个正整数,第i个数字表示填写一次数字i所需要的金币数.

输出描述:

输出满足条件的最大数字.

示例1

输入

复制

5
5 4 3 2 1 2 3 4 5

输出

复制

55555

示例2

输入

复制

2
9 11 1 12 5 8 9 10 6

输出

复制

33

示例3

输入

复制

0
1 1 1 1 1 1 1 1 1

输出

复制

-1

备注:

0≤ n≤ 1e6
1≤ ai≤ 1e5

思路:逆向思维从高位向低位考虑。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int a[maxn];
int main()
{
    int n, k, mi = maxn;
    scanf("%d",&n);
    for(int i = 1; i <= 9; i++) scanf("%d",&a[i]);

    mi = *min_element(a+1,a+10); k = n / mi;
    if(k == 0) puts("-1");
    else
    {
        while(k--)
        {
            for(int i = 9; i >= 1; i--)
            {
                if(n - k * mi >= a[i])
                {
                    printf("%d",i);
                    n -= a[i];
                    break;
                }
            }
        }
        puts("");
    }
}

猜你喜欢

转载自blog.csdn.net/sugarbliss/article/details/81275348
今日推荐