矩形嵌套 南阳理工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
- 1
- 样例输出
-
- 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& ...
随机推荐
- memcached使用说明
1.在服务器上注册服务 2.启动服务:services.msc 3.客户端创建服务接口 object Get(string key); List<string> GetKeys ...
- PKUSC滚粗记
本来想考得这么烂还是别写了,后来想想毕竟是我高中难得的一次经历,靠脑子记的话我这脑残患者将来肯定会忘了啊……QwQ 好像跟我一样用这个题目的神犇都签了一本QwQ Day 0 来的路上我校其他三位OIe ...
- NYOJ-20 吝啬的国度 AC 分类: NYOJ 2014-01-23 12:18 200人阅读 评论(0) 收藏
#include<cstdio> #include<cstring> #include<vector> using namespace std; int pre[1 ...
- JavaScript之Throw、Try 、Catch讲解
try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 错误一定会发生 当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误: 可能是 ...
- 《深入浅出JavaScript》
第一章JS入门 第二章数据和判定常用的转义序列\b 回退 \f换页 \n换行 \r回车 \t制表符 \'单引 \"双引 \\反斜乘除求余的优先级相同,从左向右执行string对象indexO ...
- JS范围
JS API-->DOM/PoneGap/Cordova/Android/NodeJS JS OOP
- Native App执行JS
iOS: - (void)webViewDidFinishLoad:(UIWebView *)webView{ //js方法名+参数 NSString* jsCode = [NSS ...
- LCIS(m*n) 最长公共上升子序列
详见:http://wenku.baidu.com/view/3e78f223aaea998fcc220ea0n3的: for(int i=1;i<=n;i++) for ...
- Sqli-labs less 42
Less-42 Update更新数据后,经过mysql_real_escape_string()处理后的数据,存入到数据库当中后不会发生变化.在select调用的时候才能发挥作用.所以不用考虑在更新密 ...
- Java 性能要点:自动装箱/ 拆箱 (Autoboxing / Unboxing)
[编者按]本文作者为 Ali Kemal TASCI,最早于2016年4月9日发布于DZONE社区.文章主要介绍通过改进 Java 1.5 就已存在的骨灰级特性大幅度提高应用性能. 本文系 OneAP ...