HDU - 1051 Wooden Sticks

有一堆n个木棍。每个棒的长度和重量是预先知道的。木棒要用木工机械逐一加工。它需要一些时间,称为设置时间,机器准备加工一根棍子。安装时间与清洗操作和更换机器中的工具和形状有关。木工机床的安装时间如下:

(a)第一根木棍的安装时间为1分钟。

(b)在加工长度l和重量w的棒材之后,如果l<=l'和w<=w',机器将不需要长度l'和重量w'的棒材的安装时间。否则,安装需要1分钟。

你要找到最小的设置时间来处理给定的一堆木棒。例如,如果有5根棍子的长度和重量对(4,9)、(5,2)、(2,1)、(3,5)和(1,4),那么最小设置时间应该是2分钟,因为存在一系列对(1,4)、(3,5)、(4,9)、(2,1)、(5,2)。

 

对于题目例子中的(4,9)、(5,2)、(2,1)、(3,5)和(1,4),经过排序后得到的是(1,4)、(2,1),(3,5),(4,9),(5,2)

首先从(1,4)开始向右搜索,发现(2,1)未被计算过,但是不满足情况,那么将该位置记为start(每次搜索前被赋值为n(坐标点的个数)),作为下次搜索的起点,继续向右发现(3,5)满足情况,那么重新将(3,5)作为与下一个比较的点并且标记为已计算,与(4,9)比较,满足情况,则(4,9)与(5,2)比较发现不满足情况,但是已到达尾部,开始下一次搜索,开始位置为start,即(2,1),由于(3,5),(4,9)已经被标记为计算过,将与(5,2)进行匹配,成功,标记为已计算,没有发现匹配不成功的情况,故start位置为n,下次匹配不会进行,即完成全部计算

#include <iostream>
#include <cmath>
#include <math.h>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
struct node{
    int a,b,c;
}n[10010];
bool cmp(node p1,node p2)
{
    if(p1.a == p2.a)
        return p1.b < p2.b;
    return p1.a < p2.a;
}
int main()
{
    int t,m,ans = 0;
    scanf("%d",&t);
    while(t--)
    {
        ans = 0;
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&n[i].a,&n[i].b);
            n[i].c = 1;
        }
        sort(n+1,n+1+m,cmp);

        int k = 1;
        int temp = 0;
        while(temp != m){
            int x = 0,y = 0;
            for(int i=k;i<=m;i++)
                if(n[i].c){
                    k = i;
                    break;
                }
            for(int i=k;i<=m;i++)
            {
                if(!n[i].c)
                    continue;
                if(n[i].a >= x && n[i].b >= y){
                    temp++;
                    n[i].c = 0;
                    x = n[i].a;
                    y = n[i].b;
                }
            }
            ans++;
        }
        cout<<ans<<endl;
    }
    return 0;
}

 

全部评论

相关推荐

点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务