UVA 103 Stacking Boxes(最长增长子序列变形)
2013-10-08 00:05
423 查看
题目: 对于K维空间的盒子,你可以进行任意旋转, 如果某个盒子没一维长度都比另一个盒子对应长度短,则前者能够嵌套在后者里面,求一个最长的嵌套链。
一看到这题就有似曾相识的感觉,仔细一想,这不就是个最长增长子序列问题吗。 两者明显有个对应关系,最长曾长子序列是满足后面的数大于前面的数,而这里是后面的盒子能套住前面的盒子。
为了便于比较,我们可以将K为长度按递增排列, 盒子也按大小递增排列。。
代码:
一看到这题就有似曾相识的感觉,仔细一想,这不就是个最长增长子序列问题吗。 两者明显有个对应关系,最长曾长子序列是满足后面的数大于前面的数,而这里是后面的盒子能套住前面的盒子。
为了便于比较,我们可以将K为长度按递增排列, 盒子也按大小递增排列。。
代码:
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> using namespace std; int N,K; struct BOX{ int a[12]; int ID; void SORT(){ sort(a,a+K); } }box[50]; bool cmp(const BOX&a,const BOX&b){ for(int i=0;i<K;i++){ if(a.a[i] <= b.a[i]) return false; } return true; } bool sortcmp(const BOX&a,const BOX&b){ for(int i=0;i<K;i++){ if(a.a[i] != b.a[i]) return a.a[i]<b.a[i]; } return a.a[0]<b.a[0]; } int d[50]; int main() { while(scanf("%d%d",&N,&K)!=EOF){ for(int i=0;i<N;i++){ for(int j=0;j<K;j++){ scanf("%d",&box[i].a[j]); } box[i].ID=i+1; box[i].SORT(); } sort(box,box+N,sortcmp); d[0]=1; int MAX=1,p=0; for(int i=1;i<N;i++){ d[i]=1; for(int j=0;j<i;j++){ if(cmp(box[i],box[j])){ //cerr<<j+1<<" < "<<i+1<<endl; d[i]=max(d[i],d[j]+1); } } if(d[i]>MAX){ MAX=d[i],p=i; } } printf("%d\n",MAX); vector<int>ans; ans.push_back(box[p].ID); for(int i=1;i<MAX;i++){ //从新构造出合法解 for(int j=0;j<N;j++){ if(d[j]+1==d[p] && cmp(box[p],box[j])) p=j; } ans.push_back(box[p].ID); } printf("%d",ans[ans.size()-1]); for(int i=ans.size()-2;i>=0;i--) printf(" %d",ans[i]); printf("\n"); } return 0; }
相关文章推荐
- Stacking Boxes +uva+dp(最长严格降子序列的变形)
- UVa 103 Stacking Boxes 堆砌盒子(DP 最长条件子序列)
- uva103-Stacking_Boxes(dp最长递增子序列)
- uva103-Stacking_Boxes(dp最长递增子序列)
- UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)
- uva 103 Stacking Boxes(最长上升子序列)
- uva 103 Stacking Boxes(DAG上的最长路径)
- UVA 103 Stacking Boxes n维最长上升子序列
- UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)
- UVa 103 - Stacking Boxes (LIS,打印路径)
- Uva-103-Stacking Boxes
- uva 103 Stacking Boxes (DAG)
- UVa - 103 - Stacking Boxes
- uva 103 (dp)Stacking Boxes
- UVa Problem 103 - Stacking Boxes
- uva 103 Stacking Boxes
- uva10534(最长递增子序列的算法变形 复杂度较低)
- uva 103 - Stacking Boxes
- UVA 103--- Stacking Boxes
- Uva103 Stacking Boxes 贪心 深搜 +DP思想