poj1065

题目描述那么久,而让我们求的东西却很简单,就是给你一些木棍,已知每根木棍的质量与长度,问按照质量与长度把这些木棍分类,问至少能分为多少类?

分类的要求:每一类中的木棍能按质量与长度从小到大排序!

思路:我们先把每根木棍用结构体存起来,然后按长度(或质量)从小到大进行排序,假如长度(或质量)相等的按照质量(或长度)排序!再宁外一个量由小到大分类,假如说木棍n+1的质量(或长度)小于木棍n,那么下一类的分类已经开始;

参考代码如下:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
struct Machine
{
    int l, w;
}data[5010];
bool use[5010]; 
bool operator < (const Machine a, const Machine b) //将木棒排序 长度递增 若相等则重量递增
{
    if(a.l == b.l)
        return a.w < b.w;
    return a.l < b.l;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int m,sum=0;
        cin>>m;
        int last;
        memset(use,0,sizeof(use));
        for(int i=0;i<m;i++)
           {
               cin>>data[i].l>>data[i].w;
           }
            sort(data,data+m);
        for(int i=0;i<m;i++){
                last=data[i].w;
                if(!use[i])
                {
                    for(int j=i+1;j<m;j++)
                        {
                            if(data[j].w>=last&&!use[j])
                               {
                                   last=data[j].w;
                                    use[j]=1;
                                }
                        }
                    sum++;
                }
             }
            cout<<sum<<endl;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值