UVa:103 Stacking Boxes
来源:互联网 发布:工资查询软件 编辑:程序博客网 时间:2024/06/10 03:27
1Y.
做完10131 Is Bigger Smarter?以后才知道是个LIS的题。这个题跟那个很相似。
不多说了。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;struct Box{ int num,d[12];};Box p[32];int dp[32];int path[32];int n,k;bool Judge(Box &a,Box &b){ for(int i=0; i<k; ++i) if(a.d[i]>=b.d[i]) return false; return true;}bool cmp(Box a,Box b){ int i=0; while(a.d[i]==b.d[i]&&i<k) i++; if(i<k) return a.d[i]<b.d[i]; else return a.d[i-1]<b.d[i-1];}int main(){ while(scanf("%d%d",&n,&k)!=EOF) { memset(dp,0,sizeof(dp)); memset(path,-1,sizeof(path)); for(int i=1; i<=n; ++i) { for(int j=0; j<k; ++j) scanf("%d",&p[i].d[j]); sort(p[i].d,p[i].d+k); p[i].num=i; } sort(p+1,p+n+1,cmp); int mx; for(int i=n; i>=1; --i) { mx=-1; bool ok=false; for(int j=i+1; j<=n; ++j) if(Judge(p[i],p[j])&&dp[j]>mx) { mx=dp[j]; path[i]=j; ok=true; } if(ok) dp[i]=1+mx; else { path[i]=0; dp[i]=1; } } mx=-1; int key; for(int i=1; i<=n; ++i) if(dp[i]>mx) { mx=dp[i]; key=i; } printf("%d\n",mx); printf("%d",p[key].num); key=path[key]; while(key) { printf(" %d",p[key].num); key=path[key]; } printf("\n"); } return 0;}
- UVa 103 Stacking Boxes
- UVA 103 - Stacking Boxes
- uva 103 - Stacking Boxes
- uva 103 Stacking Boxes
- [UVA 103] Stacking Boxes
- uva:103 - Stacking Boxes
- UVa 103 - Stacking Boxes
- UVA - 103 Stacking Boxes
- uva 103 - Stacking Boxes
- UVA 103 Stacking Boxes
- UVa 103 - Stacking Boxes
- Uva - 103 - Stacking Boxes
- uva 103 - Stacking Boxes
- UVa 103 - Stacking Boxes
- UVa 103 - Stacking Boxes
- Uva-103-Stacking Boxes
- UVa:103 Stacking Boxes
- UVA - 103 Stacking Boxes
- as3使用滤镜为文字描边(GlowFilter)
- hdu 1041大数问题
- Android的编译系统(转载)
- static,inline,volatile的作用
- [资源分享]神州数码 思科 UCS 虚拟化培训资料
- UVa:103 Stacking Boxes
- 易信一出,中国移动更加尴尬
- 测试人员绩效评估方法
- public、private、protect、friendly
- 企业如何选择自己的BI工具
- Qt DomDoucment方式读写 xml文件
- ZOJ 2412 Farm Irrigation
- ViewPager 滑动切换 activity
- cocos2d-x win32移植到android