Color the Fence

Color the Fence

Igor has fallen in love with Tanya. Now Igor wants to show his feelings and write a number on the fence opposite to Tanya’s house. Igor thinks that the larger the number is, the more chance to win Tanya’s heart he has.
Unfortunately, Igor could only get v liters of paint. He did the math and concluded that digit d requires ad liters of paint. Besides, Igor heard that Tanya doesn’t like zeroes. That’s why Igor won’t use them in his number.
Help Igor find the maximum number he can write on the fence.

Input

The first line contains a positive integer v (0 ≤ v ≤ 106). The second line contains nine positive integers a1, a2, …, a9 (1 ≤ ai ≤ 105).

Output

Print the maximum number Igor can write on the fence. If he has too little paint for any digit (so, he cannot write anything), print -1.

Examples

Inpu

5
5 4 3 2 1 2 3 4 5

Output

55555

Input

2
9 11 1 12 5 8 9 10 6

Output

33

Input

0
1 1 1 1 1 1 1 1 1

Output

-1

大意:给了v升油漆,9个数,涂每个数需要相应数量的油漆,问可以涂出的最大数是多少。

思路: 一个数必然是越长越大,就是位数越多越大,那么我们不就可以直接找出消耗油漆最少的那个数,完了一直涂这个数不就好了,但是这样是存在问题的,就是说我们的油漆可能不会正好用完,是不是会存在这么一种情况,就是我剩下的油漆加上一个最小的油漆消耗可以换一个更大的数,那显然这个数要比所有的都是最小油漆消耗量的数要大。我们发现当找到最小油漆消耗的时候所求数的最大位数也确定了。那我们就可以依托这个条件把这种情况包含进去,操作是这样的,我们求出最大位数,从后往前每次用总油漆先减一个,然后看剩下的位数是否和最大位数减一相等,直到进行完最大位数次。

上代码

#include <iostream>
using namespace std;
int a[11];
int v;
int main()
{
   cin >> v;
int minn = 9999999;
   for(int i = 1; i <= 9; i++)
   {
       cin >> a[i];
       if(a[i] < minn)
           minn = a[i]; // 最小值
   }
   if(v < minn)
   {
    cout << "-1" << endl;
    return 0;
   }
   int kmax = v / minn; //确定的位数
   while(true)
   {
       for(int i = 9; i >= 1; i--)
       {
           if(v < a[i])
               continue;
           if(((v-a[i])/minn)==(kmax-1)) //每次看位数是否相等
           {
               cout << i;
               v -= a[i];
               kmax--;
               break;
           }
       }
       if(kmax == 0) //输出所有的位数后结束
           break;
   }
   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值