UVA 103 Stacking Boxes n维最长上升子序列
2015-04-26 11:34
323 查看
题目链接:UVA - 103
题意:现有k个箱子,每个箱子可以用n维向量表示。如果一个箱子的n维向量均比另一个箱子的n维向量大,那么它们可以套接在一起,每个箱子的n维向量可以互相交换值,如箱子(2,6)可以和箱子(7,3)套接在一起。求出套接的箱子最多的个数前提下任意一种解决方案。
算法:抛开n维不看,本题就是一个DP的最长上升子序列问题,现在加上了n维的限制,想想也不是很难吧,在DP过程中判断每一维都满足条件即可。
题意:现有k个箱子,每个箱子可以用n维向量表示。如果一个箱子的n维向量均比另一个箱子的n维向量大,那么它们可以套接在一起,每个箱子的n维向量可以互相交换值,如箱子(2,6)可以和箱子(7,3)套接在一起。求出套接的箱子最多的个数前提下任意一种解决方案。
算法:抛开n维不看,本题就是一个DP的最长上升子序列问题,现在加上了n维的限制,想想也不是很难吧,在DP过程中判断每一维都满足条件即可。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define inf 0x7fffffff using namespace std; typedef long long LL; int k,n; int dp[33],pre[33]; struct node { int an[13]; int id; friend bool operator < (node a,node b) { for (int i=0 ;i<n ;i++) { if (a.an[i] != b.an[i]) return a.an[i] < b.an[i]; } } }arr[33]; void printOut(int u) { if (pre[u]!=-1) printOut(pre[u]); if (pre[u]==-1) printf("%d",arr[u].id+1 ); else printf(" %d",arr[u].id+1 ); } int main() { while (scanf("%d%d",&k,&n)!=EOF) { memset(dp,0,sizeof(dp)); memset(pre,-1,sizeof(pre)); for (int i=0 ;i<k ;i++) { for (int j=0 ;j<n ;j++) scanf("%d",&arr[i].an[j]); arr[i].id=i; sort(arr[i].an,arr[i].an+n); } sort(arr,arr+k); // for (int i=0 ;i<k ;i++) // { // for (int j=0 ;j<n ;j++) // cout<<arr[i].an[j]<<" "; // cout<<endl; // } for (int i=0 ;i<k ;i++) { int temp=0; for (int j=0 ;j<i ;j++) { int flag=0; for (int u=0 ;u<n ;u++) if (arr[i].an[u]<=arr[j].an[u]) {flag=1;break; } if (!flag && dp[j]>temp) { temp=dp[j]; pre[i]=j; } } dp[i]=temp+1; } int maxlen=-1,num=0; for (int i=0 ;i<k ;i++) { if (dp[i]>maxlen) { maxlen=dp[i]; num=i; } } printf("%d\n",maxlen); printOut(num); printf("\n"); } return 0; }
相关文章推荐
- UVA 103 Stacking Boxes(最长增长子序列变形)
- uva103-Stacking_Boxes(dp最长递增子序列)
- uva103-Stacking_Boxes(dp最长递增子序列)
- UVa 103 Stacking Boxes 堆砌盒子(DP 最长条件子序列)
- uva 103 (dp)Stacking Boxes
- UVA 103 Stacking Boxes (DP)
- uva 103 Stacking Boxes
- uva 103 - Stacking Boxes
- uva 103 Stacking Boxes
- Stacking Boxes UVA - 103(矩形嵌套)
- uva 103 Stacking Boxes
- UVA_103 Stacking boxes(DP)
- UVa 103 Stacking Boxes
- uva 103 Stacking Boxes dfs,记忆化
- 【解题报告】uva103_Stacking Boxes(堆砌盒子, dp)
- uva 103 Stacking Boxes(DAG)
- uva 103 Stacking Boxes
- UVA 103-Stacking Boxes
- 【DP】UVA 103 Stacking Boxes 输出路径
- 【DP】UVA 103 Stacking Boxes 输出路径