题意:给出若干矩形的长和宽,小的矩形可以嵌套在大的矩形中,求矩形最多的嵌套中矩形的个数
做法:嵌套关系是二元关系,转化为DAG上的最长路径问题,使用邻接表+状态转移方程即可,经典递归思想。
代码:
//nyoj 16 #include #include #include using namespace std; const int maxn = 150; int graph[maxn][maxn]; int d[maxn], n, a[maxn], b[maxn]; int max(int a, int b){ return a>b?a:b; } int dp(int i){ if(d[i]>0) return d[i]; d[i] = 1; for(int j=1; j<=n; j++){ if(graph[i][j]) d[i] = max(d[i], dp(j) + 1); } return d[i]; } int main(){ int cas, i, j; scanf("%d", &cas); while(cas--){ memset(d, 0, sizeof(d)); memset(graph, 0, sizeof(graph)); scanf("%d", &n); for(i=1; i<=n; i++) scanf("%d%d", &a[i], &b[i]); for(i=1; i<=n; i++){ for(j=1; j<=n; j++){ if((a[i] graph[i][j] = 1; } } int ans = 0; for(i=1; i<=n; i++){ int p = dp(i); ans = max(ans, p); } printf("%d\n", ans); } return 0; }