zoukankan      html  css  js  c++  java
  • HDU 1051 Wooden Sticks 造木棍【贪心】

    题目链接>>>

    转载于:https://www.cnblogs.com/Action-/archive/2012/07/03/2574800.html

     题目大意:

    给n根木棍的长度和重量。根据要求求出制作木棍的最短时间。建立第一个木棍需要1分钟,若是接着要制作的木棍重量和长度都比此木棍长就不需要建立的时间,若是没有,则再需要建立时间。求时间最小为多少。

    解题思路:

    对木棍的长度和重量进行排序,以长度为首要考虑。排序完后的不一定都是下一根木棍重量和长度都大于前一根的。于是,我们对排序后的数组进行多次扫描,将可以在一次建立时间内完成的进行标记,知道木棍全部标记(设置一个外部变量来计数已扫描的元素的数量)。

    例子:

    5

    4 9  5 2 2 1  3 5  1 4

    排序完后:

    1 4  2 1 3 5 4 9 5 2

    然后进行第一次扫描:使用mark[]数组进行标记,mark[]初始化为0,红色为第一次描过的。

    Stiks: (1 4)  (2 1)  (3 5)  (4 9)  (5 2)

    Mark:   1       0      1       1      0

    这是的setuptime为建立第一根木棍所要的时间,即1,此时扫描计数为3

    接着进行第二次扫描,蓝色为第二次扫描过的结果。

    Stiks: (1 4)  (2 1)  (3 5)  (4 9)  (5 2)

    Mark:   1       0       1       1       0

    这是的setuptime为1,此时扫描计数为5

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    struct stick
    {
        int l;
        int w;
    }s[5000];
    
    bool cmp(stick a,stick b)
    {
        if(a.l<b.l)
            return true;
        else if(a.l>b.l)
            return false;
        else
            return a.w<b.w;
    }
    
    int main()
    {
        int t,n,minute,ti,number;
        int mark[5000];
        cin>>t;
        while(t--)
        {
            cin>>n;
            for(int i=0;i<n;i++)
                cin>>s[i].l>>s[i].w;
            sort(s,s+n,cmp);
            memset(mark,0,sizeof(mark));
            number=0;
            minute=0;
            int pl;
            while(number!=n)
            {
                for(int i=0;i<n;i++)
                    if(!mark[i])
                    {
                        pl=i;
                        minute++;
                        break;
                    }
                for(int i=0;i<n;i++)
                {
                    if(!mark[i]&&s[i].l>=s[pl].l&&s[i].w>=s[pl].w)
                    {
                        mark[i]=1;
                        number++;
                        pl=i;
                    }
                }
            }
            cout<<minute<<endl;
        }
        return 0;
    }

    2018-04-25

  • 相关阅读:
    new和malloc的区别
    C++中的数据类型强制转换方法
    C++中pair和make_pair的区别
    PlantUML 图绘制类库--VSCODE插件
    Exception: HOUR_OF_DAY: 0 -> 1的问题
    Fiddler手机抓包工具如何设置过滤域名
    MySQL 正则表达式 REGEXP
    ASP.NET Web API 2 中的属性路由
    windows服务搭建(VS2019创建Windows服务不显示安装组件)
    JWT的验证(转载)
  • 原文地址:https://www.cnblogs.com/00isok/p/8944878.html
Copyright © 2011-2022 走看看