贪心算法1001

Posted Si考者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法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;
}

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

以上是关于贪心算法1001的主要内容,如果未能解决你的问题,请参考以下文章

763. 划分字母区间-贪心算法

贪心算法----区间覆盖问题(POJ2376)

Contig|scaffold|N50|L50|NG50|贪心算法|de bruiji graph|

LeetCodeLeetCode之跳跃游戏——动态规划+贪心算法

算法学习:动态规划

[Tyvj1001]第K极值 (贪心?模拟)