zoukankan      html  css  js  c++  java
  • [TJOI2013][BZOJ3174] 拯救小矮人

    3174: [Tjoi2013]拯救小矮人

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 445  Solved: 217
    [Submit][Status][Discuss]

    Description

    一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯。即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口。对于每一个小矮人,我们知道他从脚到肩膀的高度Ai,并且他的胳膊长度为Bi。陷阱深度为H。如果我 们利用矮人1,矮人2,矮人3,。。。矮人k搭一个梯子,满足A1+A2+A3+....+Ak+Bk>=H,那么矮人k就可以离开陷阱逃跑了,一 旦一个矮人逃跑了,他就不能再搭人梯了。
    我们希望尽可能多的小矮人逃跑, 问最多可以使多少个小矮人逃跑。

    Input

    第一行一个整数N, 表示矮人的个数,接下来N行每一行两个整数Ai和Bi,最后一行是H。(Ai,Bi,H<=10^5)

    Output

    一个整数表示对多可以逃跑多少小矮人

    Sample Input

    样例1

    2
    20 10
    5 5
    30

    样例2
    2
    20 10
    5 5
    35

    Sample Output

    样例1
    2

    样例2
    1

    HINT

    数据范围

    30%的数据 N<=200

    100%的数据 N<=2000

    如果我们用一个小矮人的a[i]+b[i]来衡量他的逃跑能力,那么a[i]+b[i]小的一定比大的先出去,这样才能保证跑后的剩余高度更大,使得最大可能的往外跑。

    贪心的正确性验证了,就按照a[i]+b[i]为关键字从小到大排序。但这只是一个最优序列,若可行可保证最优,但并非每次都可行,所以dp一下。

    f[i]表示出去i个人时,剩余的最大高度。

    初始f[i]=-1,表示不可能出去i个人。令f[0]=sigma(a[i])。

    然后按照贪心的顺序加人,没加一个人就把f[sum(当前跳出人的数量)]->f[1]更新一遍看是否更优。并判断第sum+1人是否可以跳出去,以此更新到底即可。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    struct node
    {
        int a,b;
    }h[2001];
    int n,H,sum,f[2001];
    bool cmp(node a,node b)
    {
        return a.a+a.b<b.a+b.b;
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
            scanf("%d%d",&h[i].a,&h[i].b);
        sort(h+1,h+n+1,cmp);
        memset(f,-1,sizeof(f));
        f[0]=0;
        for (int i=1;i<=n;i++) f[0]+=h[i].a;
        scanf("%d",&H);
        int sum=0;
        for (int i=1;i<=n;i++)
            for (int j=sum;j>=0;j--)
            {
                if (f[j]+h[i].b>=H)
                    f[j+1]=max(f[j+1],f[j]-h[i].a);
                if (f[sum+1]>=0) sum++;
            }
        printf("%d",sum);
        return 0;
    }
  • 相关阅读:
    D. Babaei and Birthday Cake--- Codeforces Round #343 (Div. 2)
    Vijos P1389婚礼上的小杉
    AIM Tech Round (Div. 2) C. Graph and String
    HDU 5627Clarke and MST
    bzoj 3332 旧试题
    codeforces 842C Ilya And The Tree
    codesforces 671D Roads in Yusland
    Travelling
    codeforces 606C Sorting Railway Cars
    codeforces 651C Watchmen
  • 原文地址:https://www.cnblogs.com/ws-fqk/p/4643266.html
Copyright © 2011-2022 走看看