矩形嵌套 南阳理工ACM
描述
有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
解题思路:
采用与求最长递增子序列类似的方式,不断保存前面的最多矩阵序列,然后再不断更新这个序列的集合。
上面是解法一,解法二是每次所有矩阵,先扫描第一个矩阵,然后从1---N个矩阵,如果第一个矩阵可以包含第I个矩阵,并且满足第i个矩阵最多矩阵列小于等于第一个矩阵那么更新第I个矩阵,使得A[i]=A[1]+1;对于其他2...N个矩阵也可以这样操作。
//观察是否满足矩形P1,在矩形P2内部
public static bool IsMatch(rectAngle p1, rectAngle p2)
{
bool flag = (p1.getX() < p2.getX() && p1.getY() < p2.getY()) || (p1.getX() < p2.getY() && p1.getY() < p2.getX());
return flag;
} public static int HaveRectangleCount(List<rectAngle> P)
{
int[,] M = new int[P.Count, P.Count];
int[] dp = new int[P.Count];
int biggest = ;
for (int k = ; k < P.Count; k++)
dp[k] = ;
rectAngle[] x = new rectAngle[P.Count + ];
x[] = new rectAngle(, );
//解法一
for (int i = ; i < P.Count; i++)
{
for (int j = count; j >= ; j--)
{
if (IsMatch(x[j], P[i]))
{
x[j + ] = new rectAngle(P[i].getX(), P[i].getY());
if (j == count)
count++;
break;
}
}
}
outPutrectAngle(x.ToList<rectAngle>(), count);//输出一个满足条件的矩阵例子
Console.WriteLine("count=" + count); //解法二、不断搜索,更新其排位表
for (int i = ; i < P.Count; i++)
{
for (int j = ; j < P.Count; j++)
{
if (IsMatch(P[i], P[j]) && (dp[i] >= dp[j]))
dp[j] = dp[i] + ;
Console.Write(dp[j] + " ");//输出此时的每个元素的排位,观察其变化过程。
}
Console.WriteLine();
} for (int i = ; i < P.Count; i++)
{
if (dp[i] > biggest)
biggest = dp[i];
}
return biggest;
} public static void outPutrectAngle(List<rectAngle> P, int Len)
{
for (int i = ; i <= Len; i++)
{
Console.Write("x=" + P[i].getX() + ",y=" + P[i].getY() + ", ");
}
Console.WriteLine();
}
矩形嵌套 南阳理工ACM的更多相关文章
- 经典DP 嵌套矩形 (南洋理工ACM—16)
本来是个很水的DP,结果被自己的代码习惯给打败了 代码: #include<iostream> #include<stdlib.h> #include<string.h& ...
- 单调递增最长子序列(南阳理工ACM)
描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理随后的n行,每行有一个字符串,该字符串 ...
- 南阳理工ACM 括号匹配问题,并求出使得括号能够匹配需要新增的最小括号数(括号匹配(二))
描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起 ...
- 南阳理工ACM Skiing问题
描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底 ...
- 南阳理工ACM——106背包问题
描述: 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10):如果给你一个背包它能容纳的重量为m(10<=m<=20),你 ...
- 2015,3,10 2(南阳理工ACM)
描述有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出. 输入 第一行有一个整数i(2<=i<30) ...
- 2015,3,10 1(南阳理工ACM)
描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成, ...
- 南阳 ACM16 矩形嵌套 动态规划
矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c, ...
- 南洋理工大学 ACM 在线评测系统 矩形嵌套
矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a& ...
随机推荐
- htaccess 探秘
.htaccess访问控制(Allow/Deny) 1. 验证是否支持.htaccess 在目录下新建一个.htaccess 文件,随笔输入一串字符(毫无意义),看看什么反应,如果是500错误,说明目 ...
- Codeforces Round #131 (Div. 2) B. Hometask dp
题目链接: http://codeforces.com/problemset/problem/214/B Hometask time limit per test:2 secondsmemory li ...
- SPFA 原理剖析代码实现分析比较
算法简介 SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 算法流程 算法大致流程是用一个队列来进行维护. ...
- Notes on the Dirichlet Distribution and Dirichlet Process
Notes on the Dirichlet Distribution and Dirichlet Process In [3]: %matplotlib inline Note: I wrote ...
- Redis杂记
参考资料: Redis 教程 | 菜鸟教程 : http://www.runoob.com/redis/redis-tutorial.html Redis快速入门 :http://www.yiibai ...
- Chapter 6面向对象
1.Python中预定义的函数在定义的时候有一种很特别的形式,即是函数名是小写,并且函数名前后分别有两个下划线.同样的,在对象中也有预定义的方法,例如所有对象的基类object中的__new__(), ...
- Docker初识
<Docker--从入门到实践>是Docker技术的入门教程,学习时长两天,现整理关键点如下: 1. 什么是Docker? 轻量级操作系统虚拟化解决方案:Go语言实现:下图很好地说明了Do ...
- vi/vim使用指北 ---- Learning the vi and Vim Editors 读书 笔记
vi/vim作为liux系统下最强大,最流行的文本编辑器之一.边看<Learning the vi and vim Editor>边学习vim,顺便做写简单的笔记,供以后查询. 没看这本书 ...
- IOS第三方地图-百度地图集成
百度地图官网: http://developer.baidu.com/map/index.php?title=iossdk 照上面吧百度地图sdk集成到工程 然后在pilst文件中加入: 如果地图没有 ...
- 理解 JMeter 聚合报告(Aggregate Report)
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...