题目描述
托米发现了一种新的游戏--填数字!
每填写一次数字(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≤ 106
1≤ ai≤ 105
思路:本想着能暴力过就暴力过算了,结果写了一大堆还未遂。用的贪心思想,尽可能的贪最多的同时保证贪的数字最大。
代码如下:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define mm 99999999
using namespace std;
int main()
{
int m,n,i,j,minx;
int a[1000];
while(scanf("%d",&m)!=EOF)
{
minx=mm;
for(i=1;i<=9;i++)
{
scanf("%d",&a[i]);
minx=min(minx,a[i]);
}
if(minx>m)
{
printf("-1\n");
continue;
}
n=m/minx;
for(i=n;i>=1;i--)//位数
{
for(j=9;j>=1;j--)
{
if(m>=a[j]&&(m-a[j])/minx>=i-1)//满足可放与位数
{
printf("%d",j);
m=m-a[j];
break;
}
}
}
printf("\n");
}
return 0;
}