UVA10051

 1 // 写了挺久的说 = =  谢谢指导我的学长~
 2 // 弄懂之后还是不难的(记性不好啊= = 希望我不要太快忘了才好 ) 
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<algorithm>
 6 #define MAX 3010
 7 using namespace std;
 8 char dir[6][10]={"front", "back", "left", "right", "top" , "bottom"};
 9 struct cube
10 {
11     int weight,top,bot,dir;
12     void init(int w,int t,int b,int d)
13     {
14         weight=w; top=t; bot=b; dir=d;
15     }
16 }a[MAX];
17 int f[MAX],path[MAX];
18 void print(int x)
19 {
20     if(x==-1) return ;
21     print(path[x]);
22     printf("%d %s\n",a[x].weight,dir[a[x].dir]);
23 }
24 int main()
25 {
26     int n,cnt=0;
27     int cl[6];
28     while(scanf("%d",&n)!=EOF && n)
29     {
30         int sum=0;
31         for(int i=0;i<n;i++)
32         {
33             for(int j=0;j<6;j++)            
34                 scanf("%d",&cl[j]);        
35             for(int j=0;j<6;j++)
36             {
37                 if(j%2) a[sum++].init(i+1,cl[j],cl[j-1],j);  //记录底面和顶面 
38                 else a[sum++].init(i+1,cl[j],cl[j+1],j);
39             }            
40         }
41         memset(path,-1,sizeof(path));
42         int mx=-1,p=0 ; f[0]=1;
43         for(int i=1;i<sum;i++)
44         {
45             f[i]=1;
46             for(int j=0;j<i;j++)
47             {
48                 if(a[i].weight > a[j].weight && a[i].top == a[j].bot && f[j]+1>f[i] )  // LIS 
49                 {
50                     f[i]=f[j]+1;
51                     path[i]=j;
52                     if(f[i]>mx) mx=f[i],p=i;
53                 }
54             }
55         }
56         if(cnt) printf("\n"); 
57         printf("Case #%d\n%d\n",++cnt,mx);
58         print(p);        
59     }
60     return 0;
61 }

 

转载于:https://www.cnblogs.com/ember/p/4872840.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值