生活随笔
收集整理的這篇文章主要介紹了
矩形嵌套问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個問題據說是dp問題,不過我覺得只用到了一點
dp知識,先把矩形排序,寬對應寬長對應長;然后
對寬或者長進行排序(二級排序),再找出另一方的最大上升子
序列,即可。
?#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h># define maxn 1000int cmp(const void *a,const void *b)
{ int* c = (int *)a; int* d = (int *)b;if(*c != *d)return *c - *d;return *(d+1) - *(c+1);
}int main()
{int a[maxn+10][5];int b[maxn+10];int t,n,i,j,temp;scanf("%d",&t);while(t--){scanf("%d",&n);for(i=0;i<n;i++){scanf("%d%d",&a[i][0],&a[i][1]);if(a[i][0] > a[i][1]){temp = a[i][0];a[i][0] = a[i][1];a[i][1] =temp;}}qsort(a,n,sizeof(a[0]),cmp);int max=0;for(i=0;i<n;i++){ max = 0;for(j=i-1;j>=0;j--){if(a[j][1]<a[i][1] && b[j]>max)max = b[j];}b[i] = max + 1;}int count = 0;for(i=0;i<n;i++)if(b[i] > count)count = b[i];printf("%d\n",count);}return 0;
}
轉載于:https://www.cnblogs.com/java0721/archive/2011/08/17/2602958.html
總結
以上是生活随笔為你收集整理的矩形嵌套问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。