题目描述
托米发现了一种新的游戏--填数字!
每填写一次数字(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("");
}
}