zoukankan      html  css  js  c++  java
  • Rectangles(第七届ACM省赛原题+最长上升子序列)

    题目链接:

    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1255

    描述

    Given N (4 <= N <= 100)  rectangles and the lengths of their sides ( integers in the range 1..1,000), write a program that finds the maximum K for which there is a sequence of K of the given rectangles that can "nest", (i.e., some sequence P1, P2, ..., Pk, such that P1 can completely fit into P2, P2 can completely fit into P3, etc.).

     

    A rectangle fits inside another rectangle if one of its sides is strictly smaller than the other rectangle's and the remaining side is no larger.  If two rectangles are identical they are considered not to fit into each other.  For example, a 2*1 rectangle fits in a 2*2 rectangle, but not in another 2*1 rectangle.

     

    The list can be created from rectangles in any order and in either orientation.

    输入
    The first line of input gives a single integer, 1 ≤ T ≤10, the number of test cases. Then follow, for each test case:

    * Line 1: a integer N , Given the number ofrectangles N<=100
    * Lines 2..N+1: Each line contains two space-separated integers X Y, the sides of the respective rectangle. 1<= X , Y<=5000
    输出
    Output for each test case , a single line with a integer K , the length of the longest sequence of fitting rectangles.
    样例输入
    1
    4
    8 14
    16 28
    29 12
    14 8
    样例输出
    2
     1 /*
     2 问题 输入n个矩形的两条边长,计算并输出满足嵌套条件的最大长度,嵌套条件是其中一个矩形的一条边小于两一个矩形的一条边,而另
     3 一条边小于等于另一个矩形的另一条边。
     4 
     5 解题思路
     6 比赛结束后,第一个重要的是读题读题读题。没有看到题目描述的最后一句话可以变换顺序及方向。导致没有排序,wa了7遍。
     7 其实思路很简单,读入的时候将n个矩形尽可能的放平,就是短边放前面,再将所有矩形排序,排序规则是先比较第一条边,小的在前,
     8 如果相等时比较第二条边,小的在前面(记得是小于,不确定的时候输出看一下)。然后就是最长上升子序列的模板了。 
     9 */
    10 
    11 #include<cstdio>
    12 #include<algorithm>
    13 using namespace std;
    14 
    15 struct REC{
    16     int c,k;
    17 }rec[110];
    18 
    19 int cmp(struct REC a,struct REC b){
    20     if(a.c < b.c)
    21         return 1;
    22     else if(a.c == b.c)
    23         return a.k < b.k;//先按照c排,在按照k排的关键,wa了两次 
    24     return 0;
    25 }
    26 
    27 int ok(struct REC a,struct REC b){
    28     if((a.c > b.c && a.k >= b.k) || (a.k > b.k && a.c >= b.c))
    29         return 1;
    30     return 0;
    31 }
    32 
    33 int main()
    34 {
    35     int T;
    36     scanf("%d",&T);
    37     int n,i,j,a[110]; 
    38     while(T--){
    39         scanf("%d",&n);
    40         
    41         int e1,e2;
    42         for(i=1;i<=n;i++){
    43             scanf("%d%d",&e1,&e2);
    44             rec[i].c=e1<e2?e1:e2;//保证短边在前 
    45             rec[i].k=e1<e2?e2:e1;
    46         }
    47         
    48         sort(rec+1,rec+n+1,cmp); 
    49         
    50         /*for(i=1;i<=n;i++)
    51             printf("%d %d
    ",rec[i].c,rec[i].k);*/ 
    52         a[1]=1;
    53         for(i=2;i<=n;i++){
    54             int temp=0;
    55             for(j=1;j<i;j++){
    56                 if(ok(rec[i],rec[j])){
    57                     if(temp < a[j])
    58                         temp = a[j];
    59                 }
    60             }
    61             a[i] = temp +1;
    62         }
    63         
    64         int ans=-1;
    65         for(i=1;i<=n;i++){
    66             if(a[i] > ans)
    67                 ans = a[i];
    68         }
    69         printf("%d
    ",ans);
    70     }
    71     return 0;
    72 }
  • 相关阅读:
    [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ
    [安卓] 13、安卓蓝牙定位(一)——如何周期性获得蓝牙节点信号强度?
    [stm32] NRF24L01+USART搞定有线和无线通信
    [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏
    [安卓] 11、串口蓝牙·将软硬结合进行到底
    [安卓] 10、悬浮窗与获取其他任务信息
    [安卓] 9、线程、VIEW、消息实现从TCP服务器获取数据动态加载显示
    [安卓] 8、VIEW和SURFACEVIEW游戏框架
    [安卓] 7、页面跳转和Intent简单用法
    Git常用命令记录
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/8954815.html
Copyright © 2011-2022 走看看