• hdu 1069 Monkey and Banana


    题意:给出长方体的长宽高,问能叠多高(上面一个的底的长宽要严格大于下一个)。

    分析:按底面积排序,设dp[i]为第i个能达到的最大高度,则dp[i] = max{dp[j]} + h[i] ; (j<i)

    View Code
     1 /*
     2 Author:Zhaofa Fang
     3 Lang:C++
     4 */
     5 #include <cstdio>
     6 #include <cstdlib>
     7 #include <sstream>
     8 #include <iostream>
     9 #include <cmath>
    10 #include <cstring>
    11 #include <algorithm>
    12 #include <string>
    13 #include <utility>
    14 #include <vector>
    15 #include <queue>
    16 #include <stack>
    17 #include <map>
    18 #include <set>
    19 
    20 using namespace std;
    21 
    22 typedef long long ll;
    23 #define DEBUG(x) cout<< #x << ':' << x << endl
    24 #define PII pair<int,int>
    25 #define PB push_back
    26 #define MP make_pair
    27 #define FI first
    28 #define SE second
    29 #define lowbit(x) (x&(-x))
    30 #define INF (1<<30)
    31 
    32 struct STONE
    33 {
    34     int l,w,h;
    35 }s[100];
    36 int dp[100];
    37 bool cmp(STONE x,STONE y)
    38 {
    39     return x.l*x.w>y.l*y.w;
    40 }
    41 int main()
    42 {
    43     #ifndef ONLINE_JUDGE
    44     freopen("in","r",stdin);
    45     #endif
    46     int n;
    47     int a,b,c;
    48     int cas = 0;
    49     while(~scanf("%d",&n),n)
    50     {
    51         int nn=1;
    52         while(n--)
    53         {
    54             scanf("%d%d%d",&a,&b,&c);
    55             s[nn].l = a;s[nn].w = b;s[nn++].h=c;
    56             s[nn].l = a;s[nn].w = c;s[nn++].h=b;
    57             s[nn].l = c;s[nn].w = b;s[nn++].h=a;
    58         }
    59         sort(s+1,s+nn+1,cmp);
    60         for(int i=1;i<nn;i++)
    61         {
    62             dp[i] = s[i].h;
    63             for(int j=1;j<i;j++)
    64             {
    65                 if((s[i].l<s[j].l && s[i].w<s[j].w) || (s[i].l<s[j].w && s[i].w<s[j].l))
    66                 {
    67                     dp[i] = max(dp[i],s[i].h + dp[j]);
    68                 }
    69             }
    70         }
    71         int ans = -1;
    72         for(int i=1;i<nn;i++)
    73         {
    74             if(ans < dp[i])ans = dp[i];
    75         }
    76         printf("Case %d: maximum height = %d\n",++cas,ans);
    77     }
    78 
    79     return 0;
    80 }
  • 相关阅读:
    浏览器从输入URL到渲染出页面发生了什么
    按需加载controller——angular
    依赖注入——angular
    qrcode-reader——二维码识别
    Dynamic Web TWAIN——网页扫描SDK
    WebSocket-Node
    关机命令 shutdown
    datagrid——jQuery EasyUI
    双屏显示——NW.js
    css换行用省略号代替
  • 原文地址:https://www.cnblogs.com/fzf123/p/2740049.html
Copyright © 2020-2023  润新知