题目链接:
题意:现有k个箱子,每个箱子可以用n维向量表示。如果一个箱子的n维向量均比另一个箱子的n维向量大,那么它们可以套接在一起,每个箱子的n维向量可以互相交换值,如箱子(2,6)可以和箱子(7,3)套接在一起。求出套接的箱子最多的个数前提下任意一种解决方案。
算法:抛开n维不看,本题就是一个DP的最长上升子序列问题,现在加上了n维的限制,想想也不是很难吧,在DP过程中判断每一维都满足条件即可。
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #define inf 0x7fffffff 8 using namespace std; 9 typedef long long LL;10 11 int k,n;12 int dp[33],pre[33];13 struct node14 {15 int an[13];16 int id;17 friend bool operator < (node a,node b)18 {19 for (int i=0 ;i temp)62 {63 temp=dp[j];64 pre[i]=j;65 }66 }67 dp[i]=temp+1;68 }69 int maxlen=-1,num=0;70 for (int i=0 ;i maxlen)73 {74 maxlen=dp[i];75 num=i;76 }77 }78 printf("%d\n",maxlen);79 printOut(num);80 printf("\n");81 }82 return 0;83 }