程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NYOJ 16 矩形嵌套 (DAG上的DP)

NYOJ 16 矩形嵌套 (DAG上的DP)

編輯:C++入門知識

NYOJ 16 矩形嵌套 (DAG上的DP)


矩形嵌套

時間限制:3000 ms | 內存限制:65535 KB 難度:4
描述
有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形X(a,b)可以嵌套在矩形Y(c,d)中當且僅當a
輸入
第一行是一個正正數N(0 每組測試數據的第一行是一個正正數n,表示該組測試數據中含有矩形的個數(n<=1000)
隨後的n行,每行有兩個數a,b(0 輸出
每組測試數據都輸出一個數,表示最多符合條件的矩形數目,每組輸出占一行
樣例輸入
1
10
1 2
2 4
5 8
6 10
7 9
3 1
5 8
12 10
9 7
2 2
樣例輸出
5

有向無環圖上的的最長路徑。。。

#include
#include
using namespace std;
#define MAXN 1000
int g[101][101],t[MAXN+1],n;
int Max(int a,int b)
{return a>b?a:b;}
int dp(int i)
{
    int &ans=t[i];
    if(ans>0)
        return ans;
    ans=1;
    for(int j=1;j<=n;++j)
	{
		if(g[i][j])
            ans=Max(ans,dp(j)+1);
	}
	return ans;
}
int main()
{
    int N,a[101],b[101];
    int i,j,max;
    cin>>N;
    while(N--)
    {
        cin>>n;
        memset(t,0,sizeof(t));
        memset(g,0,sizeof(g));
        for(i=1;i<=n;i++)
            cin>>a[i]>>b[i];
        for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
				if((a[i]>a[j]&&b[i]>b[j])||(a[i]>b[j]&&b[i]>a[j])) 
					g[i][j]=1;
		}	
		max=-1;
		for(i=1;i<=n;++i)
			max=Max(dp(i),max);
		cout<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved