矩形套矩形解题报告

最长递增子序列

这到题给我的启发是:
1,最长递增子序列实际上就是不知道起点的动规模型。
2,动规运用在有序的数据上(如果不对矩形进行排序处理,就没有“前面的矩形不可能包含后面矩形的断言”==“前面的数小于后面的数”)

做法:排序+最长递增子序列
动规方程: f[i]=max(f[j]+1)(1<=j<i, a[j]<a[i]&&b[j]<b[i]) ==最长递增子序列的动规方程

 1 #include <stdio.h>
 2 int a[1001], b[1001], f[1001];
 3 void qsort(int l, int r)
 4 {
 5     int x, y, mid1, mid2, temp;
 6     mid1=a[(l+r)/2];
 7     mid2=b[(l+r)/2];
 8     x=l;
 9     y=r;
10     while(x<=y)
11     {
12         while(a[x]<mid1||(a[x]==mid1&&b[x]<mid2))    x++;
13         while(a[y]>mid1||(a[y]==mid1&&b[y]>mid2))    y--;
14         if(x<=y)
15         {
16             temp=a[x];
17             a[x]=a[y];
18             a[y]=temp;
19             temp=b[x];
20             b[x]=b[y];
21             b[y]=temp;
22             x++;
23             y--;
24         }
25     }
26     if(l<y)    qsort(l, y);
27     if(x<r)    qsort(x, r);
28 }
29 int main()
30 {
31     int n, i, k, temp, ans=1;
32     scanf("%d", &n);
33     for(i=1; i<=n; i++)
34     {
35         scanf("%d%d", &a[i], &b[i]);
36         if(a[i]<b[i])
37         {
38             temp=a[i];
39             a[i]=b[i];
40             b[i]=temp;
41         }
42     }
43     qsort(1, n);
44     for(i=1; i<=n; i++)
45     {
46         for(k=1; k<i; k++)
47         {
48             if(a[i]>a[k]&&b[i]>b[k]&&f[k]+1>f[i])
49             {
50                 f[i]=f[k]+1;
51             }
52         }
53         if(f[i]>ans)    ans=f[i];
54     }
55     printf("%d", ans+1);
56     return 0;
57 }

完整代码

时间: 2024-12-26 13:11:09

矩形套矩形解题报告的相关文章

叠放箱子解题报告

带权值的最长上升子序列f[i]表示从后往前讨论叠放i个箱子的最小重量(因为是反向读入,其实从前往后讨论,更像最长上升子序列了) 动规方程:  f[k+1]=mid(f[k+1], self[i]+f[k]) (stand[i]>=f[k]) (0<=k<i) 最长上升子序列的方程  f[i]=f[j]+1(1<=j<i, a[j]<a[i]) 又一次犯了和最长上升子序列一样的算法错误又一次屁颠屁颠地给f[1]赋了初值然后从f[2]开始讨论,好吧,从f[2]讨论就讨论吧,

2016.8.27一套简单的题解题报告

一套不错的题,需要相关资料的联系我咯 考试分析: 1.  由于题目的名字加上第一道题没读完时我以为是我最不擅长的treeDP(其实不得不说,树和图上的题我真的是不想写,一般都写不对,上课太不认真,这个弱点要加强训练),我直接跳到了最后一道题,明知考3h还用了30min去分析,不过还是感谢,这30min救了我两道题出来: 这套题的确还是比较简单,后两道题只要认真分析数据都不会有问题,也许是因为暑假切了贪心和递推,我对分析数据比较在行,第三题切完之后还有2h,不过没写高精的我有点慌,打算最后留一点时

JLOI2015 解题报告

那个嘛= =,虽说是JLOI的解题报告但还差第一题没写= =,就这样行啦 T2:[JLOI2015]城池攻占 首先这道题我们先考虑暴力,也就是每个点向父亲跑,我们考虑能否一起做,可以发现在同一个点的骑士可以用一个堆维护一起跳(因为没有改变优先级的操作)然后再用懒标记维护,我们可以直接用一个可合并堆来维护就可以啦 当然这道题用线段树,倍增都是可行的,就是空间比较拙计罢了,需要用一些奇奇怪怪的方法来干 CODE: 1 #include<cstdio> 2 #include<iostream&

[noip2011]铺地毯(carpet)解题报告

最近在写noip2011的题,备战noip,先给自己加个油! 下面是noip2011的试题和自己的解题报告,希望对大家有帮助,题目1如下 1.铺地毯(carpet.cpp/c/pas) [问题描述]为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有n 张地毯,编号从1 到n.现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上.地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的

解题报告:LeetCode The Skyline Problem(画天际

题目出处:https://leetcode.com/submissions/detail/47013144/题意描述: 给定一系列矩形的左边坐标Li,右边坐标Ri,和高度Hi(其中Li按照从小到大的顺序排列).代表城市中一座座高楼.求这些矩形代表的高楼行成的天际线.天际线的定义为:在远处看这些所有的高楼时看到的轮廓. 数据输入: [ [L1, R1, H1], [Li, Ri, Hi]...]为元素类型为三维向量的向量,其中Li,Ri,Hi的含义见题意描述.且输入数据保证: 0 ≤ Li, Ri

常州培训 day5 解题报告

第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程: 1.首先感觉是能放就尽可能使正方形边长大,但是很明显有反例(见图A) 2.然后想到从上到下从左到右,依次检查,如果还没被铺上,那么就先铺上1*1的X,然后检查它右边能填什么,如果他右边能填的比它大(Y),那么就把1*1的改成尽可能大,如果他右边的比它小,那么它只要放1*1的X,然后右边放尽可能大的Y.

解题报告 之 HDU5301 Buildings

解题报告 之 HDU5301 Buildings Description Your current task is to make a ground plan for a residential building located in HZXJHS. So you must determine a way to split the floor building with walls to make apartments in the shape of a rectangle. Each buil

NOIP 2001解题报告

第一题:  有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1.要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位. 解题过程: 直接枚举,把根的范围扩大到100来处理 (精确到小数点后2位 ),水题,15分钟写完AC.如果精确到小数点后6位什么的,就只能二分求解了..我是把结果和0相差不到0.02的 就当成

poj 3020 Antenna Placement 解题报告

题目链接:http://poj.org/problem?id=3020 题目意思:首先,请忽略那幅有可能误导他人成分的截图(可能我悟性差,反正有一点点误导我了). 给出一幅 h * w 的图,  “ * ” 表示 point of interest,“ o ” 忽略之.你可以对 " * " (假设这个 “* ”的坐标是 (i, j))画圈,每个圈只能把它四周的某一个点括住(或者是上面(i-1, j) or 下面(i+1, j) or 左边(i, j-1)  or 右边(i, j+1))