输出
每组测试数据都输出一个数,表示最多符合条件的矩形数目,每组输出占一行
样例输入
1
10
1 2
2 4
5 8
6 10
7 9
3 1
5 8
12 10
9 7
2 2
样例输出
5来源
经典题目
[cpp]
/*********************************
* 日期:2013-3-26
* 作者:SJF0115
* 题号: 题目16: 矩形嵌套
* 来源:http://acm.nyist.net/JudgeOnline/problem.php pid=16
* 结果:AC
* 来源:南阳理工OJ
* 总结:
**********************************/
#include
#include
#include
typedef struct Rec{
int MaxL;
int MinL;
}Rec;
int cmp(const void *a,const void *b){
struct Rec* c = (Rec* )a;
struct Rec* d = (Rec* )b;
return c->MaxL - d->MaxL;
}
int main ()
{
int N,M,a,b,i,j;
Rec rec[1010];
int dp[1010];
//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
scanf("%d",&N);
while (N--){
scanf("%d",&M);
//初始化
for(i = 0;i < M;i++){
scanf("%d %d",&a,&b);
if(a < b){
rec[i].MaxL = b;
rec[i].MinL = a;
}
else{
rec[i].MaxL = a;
rec[i].MinL = b;
}
}
//按最大边排序
qsort(rec,M,sizeof(rec[0]),cmp);
//初始化数组dp
memset(dp,0,sizeof(dp));
for(i = 0;i < M;i++){
dp[i] = 1;
for(j = 0;j < i;j++){
if(rec[i].MaxL > rec[j].MaxL && rec[i].MinL > rec[j].MinL){
if(dp[i] < dp[j] + 1){
dp[i] = dp[j] + 1;
}
}
}
}
//输出
int Max = 0;
for(i = 0;i < M;i++){
if(dp[i] > Max){
Max = dp[i];
}
}
printf("%d\n",Max);
}
return 0;
}
/*********************************
* 日期:2013-3-26
* 作者:SJF0115
* 题号: 题目16: 矩形嵌套
* 来源:http://acm.nyist.net/JudgeOnline/problem.php pid=16
* 结果:AC
* 来源:南阳理工OJ
* 总结:
**********************************/
#include
#include
#include
typedef struct Rec{
int MaxL;
int MinL;
}Rec;
int cmp(const void *a,const void *b){
struct Rec* c = (Rec* )a;
struct Rec* d = (Rec* )b;
return c->MaxL - d->MaxL;
}
int main ()
{
int N,M,a,b,i,j;
Rec rec[1010];
int dp[1010];
//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
scanf("%d",&N);
while (N--){
scanf("%d",&M);
//初始化
for(i = 0;i < M;i++){
scanf("%d %d",&a,&b);
if(a < b){
rec[i].MaxL = b;
rec[i].MinL = a;
}
else{
rec[i].MaxL = a;
rec[i].MinL = b;
}
}
//按最大边排序
qsort(rec,M,sizeof(rec[0]),cmp);
//初始化数组dp
memset(dp,0,sizeof(dp));
for(i = 0;i < M;i++){
dp[i] = 1;
for(j = 0;j < i;j++){
if(rec[i].MaxL > rec[j].MaxL && rec[i].MinL > rec[j].MinL){
if(dp[i] < dp[j] + 1){
dp[i] = dp[j] + 1;
}
}
}
}
//输出
int Max = 0;
for(i = 0;i < M;i++){
if(dp[i] > Max){
Max = dp[i];
}
}
printf("%d\n",Max);
}
return 0;
}