• Color the Fence(Codeforces Round #202 (Div. 2))


    题目链接:http://codeforces.com/contest/349/problem/B

    题目大意:有v升油漆想要涂出一个数字,给出数字1-9所需油漆,求用v升油漆可涂的最大数字

    此题为贪心,基本思路为:找出所需油漆最小的数字(所需油漆相同取较大数字)d,所需油漆为min_v,v/min_v为数字的最大位数(max_bit),到这告一段落,假想求出的最大数就为max_bit个d组成,如输入:5 5 4 3 2 1 2 3 4 5能知道输出为:5个5——>55555。现在看另一个例子:5 2 2 4 5 4 5 4 3 5若果按刚才的想法输出为:2个2——>22但是事实为:82,接下来思考,在保证位数最大时,怎么得到最大值。要想数字大,那么首位尽可能大(首先考虑完位数问题了),如果v整除了min_v就没有改动的余地了,如果有余数leave,那么这个最大数还有改动的空间,从最大位开始贪心,能把最高位改动(前提可改的数大于d)就变动。变动后输出可改数值,最大位数max_bit-1;

    代码:

    #include<stdio.h>
     
    int main(){
        int v,a[11],d,min_v,max_bit,leave;
        while(~scanf("%d%d",&v,&a[1])){ 
            min_v=a[1];d=1;
            for(int i=2;i<10;i++) //找出升数最小数值;
            {
                scanf("%d",&a[i]);
                if(a[i]<=min_v){
                    min_v=a[i];
                    d=i;
                }
            }
            if(min_v>v){  //若最小值大于v,无解,输出-1;
                printf("-1
    ");
                continue;
            }
            max_bit=v/min_v;  //求最大位数;
            leave=v%min_v;   //求出在位数最大的前提下,最大余数;
            for(int i;leave>0&&max_bit;){   //贪心;使高位数字尽可能大;确保最大位数非负;
                for(i=9;i>d&&max_bit;i--){
                    if(leave>=(a[i]-a[d])){ 
                        printf("%d",i);
                        max_bit=max_bit-1;  //输出数字后,最大位数-1;
                        leave-=(a[i]-a[d]);
                        break;
                    }
                }
                if(i==d) break;
            }
            for(int i=0;i<max_bit;i++) printf("%d",d); //输出剩下的位数;
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    eclipse本地覆盖版本库
    数据库表分区
    oracle监听器启动,实例启动
    Mac 终端命令大全
    Mac基本用法
    wen前端学习计划
    css3animation模仿百度音乐的唱片旋转效果
    获取HTML DOM节点元素的方法的总结
    简单CSS技巧实现的Logo动画效果(很像导航栏上经常运用的效果,但有差别)
    详解 CSS 属性
  • 原文地址:https://www.cnblogs.com/shmilky/p/14089015.html
Copyright © 2020-2023  润新知