• UVa Problem 10051


    这题有点类似LIS,由于颜色最多100种,所以只需建立一个100的数组,按对立面的关系以某种颜色为向上面的最大值就可以了。
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 int cube[505][7];
     7 int max_col[105];
     8 int tmp_col[105];
     9 struct{
    10     int p;
    11     int wh;
    12 } pre[505][7];
    13 
    14 struct c{
    15     int p;
    16     int wh;
    17 }st_col[105],tmp_st[105];
    18 int ans,ansc,answ;
    19 
    20 int main(){
    21     int n; int T=0;
    22     while(scanf("%d",&n),n){
    23         for(int i=1;i<=100;i++)
    24         st_col[i].p=st_col[i].wh=-1;
    25         T++;
    26         if(T>1) printf("
    ");
    27         ans=answ=ansc=-1;
    28         memset(max_col,0,sizeof(max_col));
    29         for(int i=1;i<=n;i++){
    30             for(int j=1;j<=6;j++)
    31             scanf("%d",&cube[i][j]);
    32         }
    33         for(int i=n;i>=1;i--){
    34             for(int j=1;j<=6;j++){
    35                 tmp_col[cube[i][j]]=max_col[cube[i][j]];
    36                 tmp_st[cube[i][j]]=st_col[cube[i][j]];
    37             }
    38             for(int k=1;k<=6;k++){
    39                 if(k%2){
    40                     if(tmp_col[cube[i][k]]+1>max_col[cube[i][k+1]]){
    41                         max_col[cube[i][k+1]]=tmp_col[cube[i][k]]+1;
    42                         if(ans<max_col[cube[i][k+1]]){
    43                             ans=max_col[cube[i][k+1]];
    44                             ansc=i;
    45                             answ=k+1;
    46                         }
    47                         pre[i][k+1].p=tmp_st[cube[i][k]].p;
    48                         pre[i][k+1].wh=tmp_st[cube[i][k]].wh;
    49                         st_col[cube[i][k+1]].p=i;
    50                         st_col[cube[i][k+1]].wh=k+1;
    51                     }
    52                 }
    53                 else{
    54                     if(tmp_col[cube[i][k]]+1>max_col[cube[i][k-1]]){
    55                         max_col[cube[i][k-1]]=tmp_col[cube[i][k]]+1;
    56                         if(ans<max_col[cube[i][k-1]]){
    57                             ans=max_col[cube[i][k-1]];
    58                             ansc=i;
    59                             answ=k-1;
    60                         }
    61                         pre[i][k-1].p=tmp_st[cube[i][k]].p;
    62                         pre[i][k-1].wh=tmp_st[cube[i][k]].wh;
    63                         st_col[cube[i][k-1]].p=i;
    64                         st_col[cube[i][k-1]].wh=k-1;
    65                     }
    66                 }
    67             }
    68         }
    69         printf("Case #%d
    ",T);
    70         printf("%d
    ",ans);
    71         int p=ansc,pw=answ;
    72         while(p!=-1){
    73             printf("%d ",p);
    74             if(pw==1){
    75                 printf("front
    ");
    76             }
    77             if(pw==2) printf("back
    ");
    78             if(pw==3) printf("left
    ");
    79             if(pw==4) printf("right
    ");
    80             if(pw==5) printf("top
    ");
    81             if(pw==6) printf("bottom
    ");
    82             int tp=p,tw=pw;
    83             p=pre[tp][tw].p;
    84             pw=pre[tp][tw].wh;
    85         }
    86     }
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    hex string 换转
    TX1 flash backup & restore
    Emgu CV
    sql点滴42—mysql中的时间转换
    sql点滴42—mysql中的数据结构
    thinkphp学习笔记9—自动加载
    thinkphp学习笔记8—命名空间
    thinkphp学习笔记7—多层MVC
    js常见执行方法window.onload = function (){},$(document).ready()
    安装64位php开发环境
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/3794524.html
Copyright © 2020-2023  润新知