版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/V5ZSQ/article/details/82959379
Description
托米发现了一种新的游戏–填数字!
每填写一次数字 需要花费 枚金币,托米总共有 枚金币.
托米想知道他能得到的最大数字是多少.
如果填不了请输出 。
不需要用完所有金币
Input
第一行一个数字
,表示金币总数.
第二行
个正整数,第
个数字表示填写一次数字
所需要的金币数.
Output
输出满足条件的最大数字.
扫描二维码关注公众号,回复:
3494327 查看本文章
Sample Input
5
5 4 3 2 1 2 3 4 5
Sample Output
55555
Solution
贪心,选择最便宜且最大的数字填,如果有剩余金币则尽可能把高位数字变大
Code
#include<cstdio>
using namespace std;
int n,a[10],ans[1000005];
int main()
{
scanf("%d",&n);
int pos=1;
for(int i=1;i<=9;i++)
{
scanf("%d",&a[i]);
if(a[i]<=a[pos])pos=i;
}
if(n<a[pos])printf("-1\n");
else
{
int m=n/a[pos];
for(int i=1;i<=m;i++)ans[i]=pos;
n%=a[pos];
int j=1;
while(n)
{
int flag=0;
for(int i=9;i>pos;i--)
{
if(a[i]-a[pos]<=n)
{
flag=1;
n-=a[i]-a[pos],ans[j++]=i;
break;
}
}
if(!flag||j>m)break;
}
for(int i=1;i<=m;i++)printf("%d",ans[i]);
printf("\n");
}
return 0;
}