1 10 1 2 2 4 5 8 6 10 7 9 3 1 5 8 12 10 9 7 2 2
5
有向无环图上的的最长路径。。。
#include<iostream>
#include<cstring>
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<<max<<endl;
}
return 0;
}原文地址:http://blog.csdn.net/u014492609/article/details/39013099