同样是本机可以运行,但在oj上编译错误欸
-
输入
-
第一行是一个正正数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
#include<iostream>
#include<algorithm>
using namespace std;
int table[1001][1001];
typedef struct re
{
int w;
int h;
}R;
int compare(const void* a, const void* b)
{
R *a1 = (R*)a;
R *b1 = (R*)b;
return a1->h>b1->h ? true:a1->w>b1->w;
}
int match(R *a, R *b)
{
if(a->h > b->h && a->w > b->w)
return 1;
else if(a->h > b->w && a->w > b->h)
return 1;
else
return 0;
}
void buildDAG(R *s, int n)
{
for(int i=n;i>=1;i--)
{
for(int j=i-1;j>=1;j--)
{
if(match(&s[i],&s[j]))
{
table[i][j] = 1;
}
}
}
}
int dp(int table[][1001], int n)
{
int record[1001];
memset(record,0,sizeof(record));
record[1] = 1;
for(int i=2;i<n+1;i++)
{
table[i][i-1]? (record[i]=record[i-1]+1):(record[i]=record[i-1]+0);
}
return record[n];
}
int main()
{
int N;
cin >> N;
R s[1001];
while(N--)
{
memset(table,0,sizeof(table));
memset(s,0,sizeof(s));
int n;
int order[1001];
cin >> n;
for(int i=1;i<n+1;i++)
{
cin >> s[i].w >> s[i].h;
}
qsort((void*)s,n+1,sizeof(s[1]),compare);
buildDAG(s,n);
cout << dp(table,n) << endl;
}
}