题目描述
托米发现了一种新的游戏--填数字!
每填写一次数字(1≤ i≤9)需要花费ai枚金币,托米总共有n枚金币.
每填写一次数字(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<iostream> #include<algorithm> #include<stdio.h> #include<math.h> #include<string.h> using namespace std; int main() { int n,i,j,minx=100000000,miny=0,k=0; int p[10]; scanf("%d",&n); for(i=1;i<=9;i++) { scanf("%d",&p[i]); minx=min(minx,p[i]); } if(n<minx) { printf("-1"); } k=n%minx; for(i=1;i<=n/minx;i++) { for(j=9;j>=1;j--) { if(k>=p[j]-minx) { k=k-p[j]+minx; printf("%d",j); break; } } } return 0; }
文章来源: 牛客练习赛20-填数字(贪心)