XDU-1015 无聊的Light Light (贪心)

来源:互联网 发布:算法之美 中文版 pdf 编辑:程序博客网 时间:2024/04/30 12:10

1015: 无聊的Light Light

Time Limit: 1 Sec  Memory Limit: 128 MB
[Submit][Status][Web Board]

Description

ACM实验室某位比较胖的同学在上算法课的时候实在太无聊了,因为他觉得老师讲的实在太简单了。 于是他脑洞大开,拿出了一张白纸,想在纸上写下一个尽量大的正整数。已知这个数每一位上为数字1~9,以及他拥有的初始体力值为w,写下数字i (1 ≤ i ≤ 9)所消耗的体力值ai。 由于这人比较懒,他希望在不超过初始体力值的情况下,他能写出的整数尽量大。

Input

多组数据(不超过100组),处理到EOF。 每组数据包含两行,第一行为w(1 ≤ w ≤ 105)。 第二行为9个整数,分别为a1~a9(1 ≤ ai ≤ 105)。

Output

所求的最大的整数,如果什么都写不了,输出-1。

Sample Input

31 1 1 1 1 1 1 1 123 3 3 3 3 3 3 3 341 2 3 4 5 6 7 8 9

Sample Output

999-11111

很简单的贪心,首先要保证该数取最长的位数,在此基础上保证从最高位到最低位每一位最大即可。


#include <cstdio>#include <algorithm>using namespace std;int w,mn,all,t,num,a[10];int sear() {    for(num=9;num;--num)        if(t>=a[num])            return num;    return 0;}int main() {    while(scanf("%d",&w)==1) {        mn=100005;        for(num=1;num<=9;++num) {            scanf("%d",a+num);            mn=min(mn,a[num]);        }        if(mn>w)            printf("-1\n");        else {            all=w%mn;//all表示在保证数字位数最多的情况下还剩余多少体力值            while(w>=mn) {                t=all+mn;                printf("%d",sear());//输出满足a[num]<t的最大的num                all-=a[num]-mn;                w-=a[num];            }            printf("\n");        }    }    return 0;}



0 0
原创粉丝点击