1 条题解

  • 0
    @ 2025-8-24 21:21:55

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Dispwnl
    **

    搬运于2025-08-24 21:21:54,当前版本为作者最后更新于2017-10-22 17:32:47,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    一维数组f[high]=life

    循环d~0

    如果这个高度的生命值不小于这个垃圾丢下来的时间

    如果 高度+这个垃圾的高度不小于d,就输出这个垃圾丢下来的时间

    不然 这个高度+这个垃圾的高度 的生命值=max(d~0的生命值),即不吃垃圾用它来堆,此时高度+=这个垃圾的高度

    这个高度的生命值+=吃这个垃圾增长的生命值,即吃垃圾,此时高度不变

    最后输出高度为0的生命值,即出不去存活的最长时间

    # include<iostream>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    struct p{
        int t,h,l;
    }c[101];
    int d,g;
    int ti[101];
    int f[101];
    bool cmp(p a,p b)
    {
        return a.t<b.t;
    }
    int main()
    {
        cin>>d>>g;
        for(int i=1;i<=g;i++)
          cin>>c[i].t>>c[i].l>>c[i].h;
        sort(c+1,c+1+g,cmp);
        f[0]=10;
        for(int i=1;i<=g;i++)
          for(int j=d;j>=0;j--)
            if(f[j]>=c[i].t)
            {
                if(j+c[i].h>=d)
                {
                    cout<<c[i].t;
                    return 0;
                }
                f[j+c[i].h]=max(f[j+c[i].h],f[j]);
                f[j]+=c[i].l;
            }
        cout<<f[0];
        return 0;
    }
    
    
    • 1

    信息

    ID
    158
    时间
    1000ms
    内存
    512MiB
    难度
    4
    标签
    递交数
    1
    已通过
    1
    上传者