牛客练习赛20-填数字(贪心)

匿名 (未验证) 提交于 2019-12-03 00:27:02

题目描述

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!