• UVA437


    题意: N个立方体,给出长宽高,把他们堆起来,最高能堆多高,要求在下面的立方体的长宽严格大于在上面的。

    其实原本我是不会的,然后看了网上大神的做法 = =详见代码

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 struct node
     6 {
     7     int c,k,g;
     8     void init(int x,int y,int z)
     9     {
    10         c=x; k=y; g=z;
    11     }
    12 }a[200];
    13 int len[200];
    14 bool cmp(node x,node y)
    15 {
    16     return (x.c*x.k)<(y.c*y.k);
    17 }
    18 int main()
    19 {
    20     int n,x,y,z,cnt=0;
    21     while(scanf("%d",&n)!=EOF && n)
    22     {
    23         int m=0;
    24         for(int i=0;i<n;i++)
    25         {
    26             scanf("%d%d%d",&x,&y,&z);   // 立方体的六种摆放方法全部存起来 
    27             a[m++].init(x,y,z);
    28             a[m++].init(x,z,y);
    29             a[m++].init(y,x,z);
    30             a[m++].init(y,z,x);
    31             a[m++].init(z,x,y);
    32             a[m++].init(z,y,x);
    33         }
    34         sort(a,a+m,cmp);  // 按照底面积排个序 ,在上面的立方体底面积一定小
    35         int mx=-1; len[0]=1;
    36         for(int i=1;i<m;i++)   // LIS 求最高高度 
    37         {
    38             len[i]=a[i].g;
    39             for(int j=0;j<i;j++)
    40             {
    41                 if((a[i].c>a[j].c) && (a[i].k>a[j].k))
    42                 {
    43                     len[i]=max(len[i],len[j]+a[i].g);
    44                     mx=len[i]>mx?len[i]:mx;
    45                 }
    46             }
    47         }
    48         printf("Case %d: maximum height = %d
    ",++cnt,mx);
    49     }
    50     return 0;    
    51 }
  • 相关阅读:
    web前段学习2017.6.15
    web前段学习2017.6.13
    web前端2017.6.10
    web前段2017.6.8
    web前段学习2016.6.6
    宏任务与微任务
    浏览器兼容性问题
    TCP 和 UDP 的区别
    React如何渲染大数据量的列表?
    移动端兼容性问题
  • 原文地址:https://www.cnblogs.com/ember/p/4862131.html
Copyright © 2020-2023  润新知