zoukankan      html  css  js  c++  java
  • NYOJ 16 矩形嵌套(经典DP)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=16

    矩形嵌套

    时间限制: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
    
    样例输出
    5

    思路:经典DP。先按大小排好序,然后依次遍历每个矩形,计算当它作为最外边的矩形时所能嵌套的最大值。

     1 #include<iostream> 
     2 #include<algorithm>
     3 using namespace std;
     4 
     5 const int maxn = 1000+5;
     6 
     7 int n;
     8 int dp[maxn];
     9 
    10 struct node
    11 {
    12     int a, b;
    13 }a[maxn];
    14 
    15 bool cmp(node x, node y)
    16 {
    17     if (x.a == y.a)    return x.b < y.b;
    18     return x.a < y.a;
    19 }
    20 
    21 int main()
    22 {
    23     //freopen("D:\txt.txt", "r", stdin);
    24     int t;
    25     cin >> t;
    26     while (t--)
    27     {
    28         cin >> n;
    29         for (int i = 0; i < n; i++)
    30         {
    31             cin >> a[i].a >> a[i].b;
    32             if (a[i].a < a[i].b)
    33             {
    34                 int temp = a[i].b;
    35                 a[i].b = a[i].a;
    36                 a[i].a = temp;
    37             }
    38         }
    39         sort(a, a + n, cmp);
    40         int _Max = 0;
    41         for (int i = 0; i < n; i++)
    42         {
    43             dp[i] = 1;
    44             for (int j = 0; j < i; j++)
    45             {
    46                 if (a[j].a < a[i].a && a[j].b < a[i].b)
    47                 {
    48                     dp[i] = max(dp[i], dp[j] + 1);
    49                 }
    50             }
    51             if (dp[i]>_Max)  _Max = dp[i];
    52         }
    53         cout << _Max << endl;
    54     }        
    55     return 0;
    56 }
  • 相关阅读:
    recurse_array_change_key_case()递规返回字符串键名全为小写或大写的数组
    php循环创建目录
    ajaxFileUpload增加附加参数
    dedecms5.7 联动类型无法显示
    一些比较隐秘的OJ的网址
    Emacs 配置
    qwq
    233
    [八省联考2018]林克卡特树lct
    [APIO2014]序列分割
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6358152.html
Copyright © 2011-2022 走看看