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

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

3
1 1 1 1 1 1 1 1 1
2
3 3 3 3 3 3 3 3 3
4
1 2 3 4 5 6 7 8 9

Sample Output

999
-1
1111

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


#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;
}



你可能感兴趣的:(贪心,xdu)