zoukankan      html  css  js  c++  java
  • HDU 1069

    http://acm.hdu.edu.cn/showproblem.php?pid=1069

    题意:n种木块问最多可以摆多高,每种有无数个,上面木块的长宽必须分别小于下面木块的长宽

    注意到每种无数个这个条件是虚的,其实只有三种。dp[i]表示以第 i 块为底可以摆放的最大高度

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring> 
    
    using namespace std; 
    
    struct node{
        int x, y, z; 
    }b[105]; 
    
    int cmp(node aa, node bb){
        if(aa.x == bb.x) return aa.y > bb.y; 
        return aa.x > bb.x;  
    }
    
    int dp[105]; //以i为底可以放的最大值 
    
    int main(){
        int n;
        int cas = 1;
        while(~scanf("%d", &n), n){
            int st = 0;
            for(int i = 0; i < n; i++){
                int aa, bb, cc;
                scanf("%d %d %d", &aa, &bb, &cc);
                b[st].x = max(aa, bb); b[st].y = min(aa, bb); b[st++].z = cc; 
                b[st].x = max(aa, cc); b[st].y = min(aa, cc); b[st++].z = bb; 
                b[st].x = max(cc, bb); b[st].y = min(cc, bb); b[st++].z = aa; 
            }
            sort(b, b+st, cmp);
            memset(dp, 0, sizeof(dp));
            for(int i = 0; i < st; i++){
                dp[i] = b[i].z; 
                for(int j = i - 1; j >= 0; j--){
                    if(b[j].x > b[i].x && b[j].y > b[i].y)
                        dp[i] = max(dp[i], dp[j] + b[i].z);
                }
            }
            int ans = 0;
            for(int i = 0; i < st; i++)
                ans = max(ans, dp[i]);
            printf("Case %d: maximum height = %d
    ", cas++, ans); 
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Microsoft Azure 微软云平台系列新品发布
    python学习笔记(三)
    python学习笔记(一)
    python GUI编程(tkinter)
    python Tkinter之Button
    tkinter比较常用的组件
    tkinter窗口系列之一——列表框
    tkinter模块中常用的参数
    python的字符串操作函数之一览
    python之闭包
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/4056687.html
Copyright © 2011-2022 走看看