zoukankan      html  css  js  c++  java
  • 矩形嵌套(动态规划)

     

    矩形嵌套

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
     
    描述
    有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),表示矩形的长和宽
    输出
    每组测试数据都输出一个数,表示最多符合条件的矩形数目,每组输出占一行
    样例输入
    1
    10
    1 2
    2 4
    5 8
    6 10
    7 9
    3 1
    5 8
    12 10
    9 7
    2 2
    
    2012-03-02
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 
     7 struct SS
     8 {
     9   int a;
    10   int b;
    11 }q[1002];
    12 
    13 bool cmp(struct SS p1,struct SS p2)
    14 {
    15     if(p1.a<p2.a) return true;
    16     if(p1.a==p2.a&&p1.b<=p2.b) return true;
    17     return false;
    18 }
    19 
    20 int dp[1002];//存储第i个之前符合条件的矩形最多的个数
    21 
    22 int main()
    23 {
    24   int t,i,j,max,ans,temp,n;
    25 
    26   scanf("%d",&t);
    27   while(t--)
    28   {
    29     scanf("%d",&n);
    30     ans=1;
    31     for(i=0;i<n;i++)
    32  {
    33   scanf("%d%d",&q[i].a,&q[i].b);
    34   if(q[i].a>q[i].b)
    35   {
    36     temp=q[i].a;
    37     q[i].a=q[i].b;
    38           q[i].b=temp;
    39   }
    40  }
    41  sort(q,q+n,cmp) ;
    42  dp[0]=1;
    43     for(i=1;i<n;i++)//与求最长单调递增子序列相仿
    44         {
    45             max=0;
    46             for(j=i-1;j>=0;j--)
    47             {
    48                 if(q[i].a>q[j].a&&q[i].b>q[j].b)
    49                 {
    50                     if(max<dp[j])
    51                     {
    52                         max=dp[j];
    53                     }        
    54                 }
    55             }
    56             dp[i]=max+1;
    57             if(ans<dp[i]) ans=dp[i];
    58         }
    59 
    60  printf("%d\n",ans);
    61    
    62   }
    63   return 0;
    64 }


     

  • 相关阅读:
    学习java第20天
    学习java第19天
    学习java第18天
    学习java第17天
    学习java第16天
    java架构师学习路线-Web分布式开发框架概述
    java架构师学习路线-并发编程的概念
    java架构师学习路线-Java系统中的微服务框架
    java架构师学习路线-HashMap的知识点总结归纳
    java架构师学习路线-Java并发编程的五种状态和两种创建方式
  • 原文地址:https://www.cnblogs.com/hpuwangjunling/p/2376878.html
Copyright © 2011-2022 走看看