zoukankan      html  css  js  c++  java
  • 堆叠箱子(基础dp)

    P1086

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 38  解决: 27
    [提交][状态][讨论版][命题人:外部导入]

    题目描述

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

    输入

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

    输出

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

    样例输入

    3
    7 40 3
    5 23 8
    2 52 6
    

    样例输出

    48
    

    提示

    N  < =  400  ,  H_i  < =  100  ,  C_i  < =  10  ,  A_i  < =  40000

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int n;
    int H,C,A;
    struct BOX
    {
        int h,a,c;
    }box[405];
    bool cmp(BOX x,BOX y)
    {
        return x.a<y.a;
    }
    int main()
    {
        cin>>n;
        int num=1;
        for(int i=1;i<=n;i++)
        {
            cin>>box[i].h>>box[i].a>>box[i].c;
        }
        sort(box+1,box+1+n,cmp);
        bool f[40010];
        memset(f,0,sizeof(f));
        f[0]=1;
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=box[i].c;j++)
            {
                for(int k=box[i].a;k>=box[i].h;k--)
                {
                    if(f[k-box[i].h])
                        f[k]=1;
                    if(f[k]) ans = max(ans,k);
                }
            }
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    正则表达式详解<一>
    multimap详讲
    map详讲<二>
    map详解<一>
    priority_queue详解
    容器适配器(一):queue
    用 input() 函数返回的数据是字符串类型
    学习python的基本了解
    学习oracle的SQL语句 练习
    oracle 练习题
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/10456345.html
Copyright © 2011-2022 走看看