NYOJ 矩形嵌套

来源:互联网 发布:u盘重装mac,出现圈 编辑:程序博客网 时间:2024/06/02 02:15


矩形嵌套

时间限制: 3000ms
内存限制: 128000KB
64位整型:      Java 类名:
上一题 
 提交  运行结果  统计  讨论版
 下一题
类型: 
没有
     

    题目描述

    有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。

    输入

    第一行是一个正正数N(0<N<10),表示测试数据组数,
    每组测试数据的第一行是一个正正数n,表示该组测试数据中含有矩形的个数(n<=1000)
    随后的n行,每行有两个数a,b(0<a,b<100),表示矩形的长和宽

    输出

    每组测试数据都输出一个数,表示最多符合条件的矩形数目,每组输出占一行

    样例输入

    1101 22 45 86 107 93 15 812 109 72 2

    样例输出

    5

    来源

    NYOJ


    思路:使用结构体,用sort排序,在用book标记,每个矩形符合题意,输出最大值。


    #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct note{    double chang,kuan;}que[1100];bool cmp(note a,note b){    if(a.chang!=b.chang)        return a.chang<b.chang;    else return a.kuan<b.kuan;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        double a,b,term1,term2;        int i,j,s,max=-1,term,n,book[1100];        memset(book,1,sizeof(book));        scanf("%d",&n);        for(i=0;i<n;i++)        {          scanf("%lf %lf",&a,&b);          if(a<b)           {term1=a;a=b;b=term1;}            que[i].chang=a;que[i].kuan=b;        }         sort(que,que+n,cmp);        for(i=0;i<n;i++)        {            term1=que[i].chang;term2=que[i].kuan;max=1;            for(j=0;j<=i;j++)                if(que[j].chang<term1&&que[j].kuan<term2)                {                   term=book[j]+1;                   if(term>max)                    max=term;                }                book[i]=max;        }        max=-1;        for(i=0;i<n;i++)        {            if(book[i]>max)              max=book[i];        }        printf("%d\n",max);    }    return 0;}


    0 0
    原创粉丝点击