题意:n个矩形(n<1000),每个矩形有长a,宽b,选择尽量多的矩形,使得除最后一个矩形外,前一个矩形可以套在后一个矩形里面
题解:dp的入门题,dp[i]表示以第i个矩形为结尾的矩形最大个数,dp[i] = max(dp[i],dp[j]+1) (矩形j可以嵌套在矩形i里面)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
struct Node {
int a,b;
bool operator < (const Node &n) const {
return (a<n.a&&b<n.b)||(a<n.b&&b<n.a);
}
} node[1010];
int dp[1010];
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
memset(dp,0,sizeof(dp));
for(int i = 0;i < n;i++) {
scanf("%d%d",&node[i].a,&node[i].b);
}
dp[0] = 1;
int res = 1;
for(int i = 1;i < n;i++) {
dp[i] = 1;
for(int j = 0;j < i;j++) {
if(node[j] < node[i])
dp[i] = max(dp[i],dp[j]+1);
}
res = max(res,dp[i]);
}
printf("%d\n",res);
}
return 0;
}