zoukankan      html  css  js  c++  java
  • hdu 1069 Monkey and Banana (dp)

    题目链接:

    题意:把给定尺寸的长方体(数量不限)叠加在一起,叠加的条件是,上面一个长方体的长和宽比下面长方体的长和宽短,不能相等,长方体可以任意面朝下摆放,求这些长方体能叠加的最高的高度。

    把每个长方体分成3个元素。然后就和矩形嵌套差不多了,排序之后求容量最大的子序列。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <math.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <ctype.h>
     7 #include <iomanip>
     8 #include <queue>
     9 #include <stdlib.h>
    10 using namespace std;
    11 
    12 struct node 
    13 {
    14     int x,y,h;
    15 }f[10100];
    16 
    17 int cmp(node a,node b)
    18 {
    19     if(a.x==b.x)
    20         return a.y<b.y;
    21     return a.x<b.x;
    22 }
    23 
    24 int main()
    25 {
    26     int i,j,t,n,MAX,max1;
    27     int a,b,c,p=1;
    28     while(cin>>n&&n){
    29         t=0;
    30         for(i=0;i<n;i++){
    31             cin>>a>>b>>c;
    32             f[t].x=a,f[t].y=b,f[t++].h=c;
    33             f[t].x=b,f[t].y=a,f[t++].h=c;
    34             f[t].x=a,f[t].y=c,f[t++].h=b;
    35             f[t].x=c,f[t].y=a,f[t++].h=b;
    36             f[t].x=c,f[t].y=b,f[t++].h=a;
    37             f[t].x=b,f[t].y=c,f[t++].h=a;
    38         }
    39         sort(f,f+t,cmp);
    40         max1=f[0].h;
    41         for(i=1;i<t;i++){
    42             MAX=0;
    43             for(j=0;j<t;j++)
    44                 if((f[i].x>f[j].x&&f[i].y>f[j].y)||(f[i].y>f[j].x&&f[i].x>f[j].y))
    45                     MAX=max(MAX,f[j].h);
    46             f[i].h+=MAX;
    47             max1=max(max1,f[i].h);     
    48         }
    49         printf("Case %d: maximum height = %d
    ",p++,max1);
    50     }
    51 }
  • 相关阅读:
    Android home键和back键区别
    装饰器模式
    对象的序列化
    构建器问题
    finnally的一些用法
    LinkedList ArrayList测试2
    LinkedList ArrayList测试
    meizu调试遇到 的问题
    java和c#通过esb服务互调用组件
    .NET平台常用的框架整理
  • 原文地址:https://www.cnblogs.com/wangmengmeng/p/4918485.html
Copyright © 2011-2022 走看看