• 贪心算法1001


    简单题意:给定若干木棒,有长度和宽度,第一根木棒加工需要一分钟,如果第二根木棒的长度和宽度都大于或者等于第一根木棒,则不需要消耗另外的时间,以此类推;

    解题思路:

    首先对木棒进行排序,按照长度从小到大排序,如果长度相同,则按照重量排序,从第一根开始,以此与下一根木棒的重量比较,定义变量min=0;如果符合条件,min++;由于存在重复比较的问题,在数组里定义两个判断变量来判断该木棒是否已经进行比较过。最后比较完成,n-min=所需时间;

    ac代码:

    #include <iostream>
    #include <algorithm>
    struct mm
    {
        int l;
        int w;
        int x;
        int v;
    }a[5001];
    int cmp( mm a,mm b)
    {
        if(a.l==b.l)
        return a.w<b.w;
         if(a.l<b.l)
        return true;
        return false;
    }
    using namespace std;
    int main()
    {
        int n,N,i,j,min=0,y;
        cin>>N;
        while(N-->0)
        {
            cin>>n;
            for(i=0;i<n;i++)
            {
                cin>>a[i].l>>a[i].w;
                a[i].x=0;
                a[i].v=0;
            }int m=0;
            sort(a,a+n,cmp);
            for(i=0;i<n;m++)
           {i=m;
                for(j=i+1;j<n;)
                {
                    if(a[i].w>a[j].w||a[j].x==1)
                    {
                        j++;
                        continue;
                    }
                     if(a[i].w<=a[j].w&&a[j].x!=1)
                    {
                        if(a[i].x==1)
                        {j++;
                        continue;
                        }
                        min++;
                        i=j;
                        a[j].v=1;j=i+1;
                        continue;
                    }
    
                }
                for( y=0;y<n;y++)
                a[y].x=a[y].v;
    
    
           }
           cout<<n-min<<endl;
           min=0;
        }
    
        return 0;
    }

    感想:当有多次重复比较是,可以设置相关变量来判断是否符合比较条件;

  • 相关阅读:
    MySQL8.0.x安装和基本设置说明
    centos怎么解压zip格式文件
    MySQL数据插入
    linux下防火墙开放3306端口
    Linux Tomcat 进程与端口占用的查看与处理
    MySQL游标简介【8】
    centos7修改网卡名【2】
    CentOS安装NVIDIA显卡驱动方法
    长沙市轨道交通工程BIM应用招标公告
    问题若干
  • 原文地址:https://www.cnblogs.com/Sikaozhe/p/5294629.html
Copyright © 2020-2023  润新知