Topic Link: Click to open the link
LRJ petition The Nineth Chapter example: The longest way on a dag: Rectangle nested, an n-dimensional rectangle, a can be set in B within the condition is a existence of a full array < b can be read into the rectangle when the order. Build a little trouble with the map.
#include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include < string> #include <cctype> #include <vector> #include <cstdio> #include <cmath> #include < queue> #include <stack> #include <map> #include <set> #define MAXN 55005#define _ll __int64#define ll Long long#define INF 0x3f3f3f3f#define Mod 1<<40+10#define pp pair<int,int> #define ull unsigned long longusin G namespace Std;int k,n,dp[35],x[35][12];bool ma[35][35],fir;bool Check (int i,int j) {for (int k=0;k<n;k++) if (X[i][k] >=X[J][K]) return False;return true;} void Build () {memset (ma,0,sizeof (MA)), for (int i=1;i<=k;i++) {for (int j=i+1;j<=k;j++) if (check (i,j)) ma[i][j]=1; else if (check (j,i)) ma[j][i]=1;}} int dfs (int u) {int& ans=dp[u];if (ans>0) return ans;ans=1;for (int i=1;i<=k;i++) if (Ma[u][i]) Ans=max (Ans,dfs ( i) +1); return ans;} void output (int x) {if (FIR) printf ("%d", X), Else printf ("%d", X), fir=0;for (int i=1;i<=k;i++) if(ma[x][i]&&dp[x]==dp[i]+1) {output (i); break;}} int main () {while (scanf ("%d%d", &k,&n)!=eof) {for (int. i=1;i<=k;i++) {for (int j=0;j<n;j++) scanf ("%d", &X[I][J]); sort (x[i],x[i]+n);} Build (); int Ans=-inf,indx;memset (Dp,-1,sizeof (DP)); for (int i=1;i<=k;i++) if (Ans<dfs (i)) {ans=dp[i];indx=i;} printf ("%d\n", ans); Fir=1;output (indx);p UTS (""); return 0;}
Uva 103-stacking Boxes (dp/rectangular nesting)