zoukankan      html  css  js  c++  java
  • poj2709 贪心基础

    D - 贪心 基础

    Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

    Submit Status

    Description

    杂货店出售一种由N3<=N<=12)种不同颜色的颜料,每种一瓶(50ML),组成的颜料套装。你现在需要使用这N种颜料;不但如此,你还需要一定数量的灰色颜料。杂货店从来不出售灰色颜料——也就是它不属于这N种之一。幸运的是,灰色颜料是比较好配置的,如果你取出三种不同颜色的颜料各x ml,混合起来就可以得到xml的灰色颜料(注意不是3x)。

    现在,你知道每种颜料各需要多少ml。你决定买尽可能少的“颜料套装”,来满足你需要的这N+1种颜料。那么你最少需要买多少个套装呢?

    Input

    输入包含若干组测试数据。每组数据一行:第一个数N, 3<=N<=12, 含义如上;接下来N+1个数,分别表示你需要的N+1种颜料的毫升数。最后一种是灰色。所有输入的毫升数<=1000.

    注意:输入中不存在每个颜料套装的毫升数。由题意可知,每种各50ml,即一共50N ml

    Output

    每组数据输出一行,最少需要的套装数。

    Sample Input

    
    

    3 40 95 21 0

    7 25 60 400 250 0 60 0 500

    4 90 95 75 95 10

    5 0 0 0 0 0 333

    0

    
    

    Sample Output

    
    

    2

    8

    2

    4题目大意:汉语,易懂,需要注意的就是灰色颜料的合成3x->x;思路分析:首先考虑假如没有灰色这种这种颜料,那么很好考虑,以需要最多的那种颜料为标准就可以求出需要几套颜料,现在多了灰色,以需要最多的那种颜料为标准选择的那些套数,其他颜料肯定有剩余,可以用其他颜料来混合成灰色颜料,但是要注意的有两点,我们的目的其实是使浪费的颜料最少,每次取多的颜料还是少的颜料来进行混合呢,很显然我们应该取多的颜料来进行混合,以使各种颜料能够保证同幅减少,同时每一次只混合1ml,这样可以保证最后剩余的只是1ml,如果

    以kml来进行混合,那么最后剩余的颜料是<k.所以贪心策略就可以确定了,一是每一次混合最多的三种颜料

    二是每次只混合1ml;

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int maxn=15;
    int a[maxn],b[maxn];
    bool cmp(int a,int b)
    {
        return a>b;
    }
    int main()
    {
        int n,m,k;
        while(scanf("%d",&n)&&n)
        {
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            scanf("%d",&m);
            sort(a,a+n);
            if(a[n-1]%50==0) k=a[n-1]/50;
            else k=a[n-1]/50+1;
            int t=0;
            for(int i=0;i<n;i++)
                b[i]=k*50-a[i];
            while(t<m)
            {
                if(b[2]==0)
                {
                    k+=1;
                    for(int i=0;i<n;i++)
                        b[i]+=50;
                }
                else
                {
                    t++;
                    b[0]--,b[1]--,b[2]--;
                    sort(b,b+n,cmp);
                }
            }
            cout<<k<<endl;
        }
        return 0;
    }

  • 相关阅读:
    Python合集之Python正则表达式(三)
    Python合集之Python正则表达式(一)
    Python合集之Python字符串编码转换
    Python合集之Python字符串常用操作(五)
    Python合集之Python字符串常用操作(四)
    【EFCORE笔记】数据库SQL操作日志记录
    【EFCORE笔记】捕获审计日志数据
    【EFCORE笔记】数据库提供程序优化与单元测试
    【EFCORE笔记】仓储与工作单元模式
    【EFCORE笔记】属性变更事件追踪策略
  • 原文地址:https://www.cnblogs.com/xuejianye/p/5437227.html
Copyright © 2011-2022 走看看