题目意思很清晰 求最多的嵌套个数 相等不能被嵌套
本文提供两种解法
第一种解法对于 矩形边长较小时效果比较好 但是如果矩形边长特别大则不能有效求解
第一种解法是dp做的
定义dp[i][j] 为边长为I和j的矩形 最多能嵌套多少个矩形
状态转移过程是这样来的 当前状态是由比当前矩形的宽小一 或者比当前矩形的长小一的两种状态的较大者来的
如果给定的这些矩形中存在一个比当前矩形长宽都小一的矩形 那么 dp[I][j] = max(dp[I][j] , dp[I - 1][j - 1] + 1);
保存这些矩形信息的方式是邻接表 有点桶排序的意思 嗯 就是这样
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 104;
int arr[N][N], dp[N][N];
int main()
{
int n, t;
cin >> t ;
while (t -- ) {
cin >> n;
memset(arr , 0, sizeof(arr));
memset(dp , 0, sizeof(dp));
int a, b;
for (int i = 0; i < n; i ++) {
cin >> a >> b;
arr[a][b] ++;
arr[b][a] ++;
}
int maxx = 0;
for(int i = 1; i < N; i ++) {