zoukankan      html  css  js  c++  java
  • tyvj1086 Elevator

    背景

    广东汕头聿怀初中 Train#2 Problem4

    描述

    现有N种箱子,每种箱子高度H_i,数量C_i。现选取若干箱子堆成一列,且第i种箱子不能放在高度超过A_i的地方。试求最大叠放高度。

    输入格式

    第一行,一个整数,表示箱子种类N。
    接下来N行,每行三个整数,表示H_i,A_i,C_i。

    输出格式

    一个整数,表示最大高度。

    测试样例1

    输入


    7 40 3 
    5 23 8 
    2 52 6

    输出

    48

    备注

    N <= 400 , H_i <= 100 , C_i <= 10 , A_i <= 40000
    Vivian Snow
     
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int n,k,hc,h[1005],c[1005],a[1005],ans;
    bool f[40205];
    struct ITM{
        int h;
        int c;
        int a;
    }temp;
    bool cmp(ITM x,ITM y){
        return x.a < y.a;
    }
    vector<ITM> itm; 
    int main(){
        cin>>n;
        for(int i = 1;i <= n;i++){
            scanf("%d%d%d",&h[i],&a[i],&c[i]);
            k = 1;
            while(c[i] >= k){
                temp.a = a[i];
                temp.c = k;
                temp.h = h[i];
                c[i] -= k;
                k <<= 1;
                itm.push_back(temp);
            }
            if(c[i]){
                temp.a = a[i];
                temp.c = c[i];
                temp.h = h[i];
                itm.push_back(temp);
            }
        }
        sort(itm.begin(),itm.end(),cmp);
        n = itm.size();
        f[0] = true;
        for(int i = 0;i < n;i++){
            hc = itm[i].h*itm[i].c;
            for(int j = itm[i].a;j >= itm[i].h;j--){
                if(f[j-hc]) f[j] = true;
                if(f[j]) ans = max(ans,j);
            }
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    性能
    .Net 平台下的互联网架构新思考
    bootstrap-paginator 分页插件笔记
    HTTP 报文中的 Header 字段进行身份验证
    .NET简单企业应用
    djngo快速实现--使用Bootstrap
    Knockout应用开发指南
    Linux下OpenCV的环境搭建(转)
    初识树莓派(转)
    网络名词解释
  • 原文地址:https://www.cnblogs.com/hyfer/p/5791376.html
Copyright © 2011-2022 走看看