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