hdu1051(贪心)

题意:将木棍放在机器里处理,第一根需要一分钟,剩余的如果大于等于前边放入的长度和重量,就不用费时间,否则需要一分钟,计算给出一组数的最少时间!
思路:先将长度按从小到大排序,然后再从重量上考虑看可以构成几个连续递增的序列;
代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
struct node{
    int x,y,k;
}a[5005];
bool cmp(const node aa,const node bb)
{
    if(aa.x==bb.x)
        return aa.y<bb.y;
    return aa.x<bb.x;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,s=0;
        scanf("%d",&n);
        int i,j;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&a[i].x,&a[i].y);
            a[i].k=1;
        }
        sort(a,a+n,cmp);
        int k1=0;
        int temp=0;
        while(temp!=n)
        {
            int zx=0,zy=0;
            for(i=k1;i<n;i++)
                if(a[i].k)
                    break;
            k1=i;
            for(i=k1;i<n;i++)
            {
                if(!a[i].k)
                    continue;
                if(a[i].x>=zx&&a[i].y>=zy)
                {
                    temp++;
                    a[i].k=0;
                    zx=a[i].x;
                    zy=a[i].y;
                }
            }
            s++;
        }
        printf("%d\n",s);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值