• codevs 2075 yh女朋友的危机


    题目描述 Description

    不知为什么,yh的女朋友们都掉入了一个深度为h的天坑。由于天坑太深,yh的女朋友们无法爬出去,于是她们决定用搭人梯的方式脱困。我们知道yh的每位女朋友从脚到肩膀的高度ai,以及肩膀到伸直手臂的距离bi。由k个人搭成的人梯的高度为a1+a2+…+ak+bk;当人梯高度大于等于h时,第k个人就可以爬出天坑,并再也不进来。你能帮助他的女朋友们安排一个方案,使得最多的女朋友能爬出天坑吗?

    输入描述 Input Description

    第一行一个整数n,表示有n个女朋友掉进坑里

    第2行到第n+1行,每行两个整数,表示女朋友从脚到肩膀的距离ai和从肩膀到伸直手臂的距离bi。

    第n+2行为一个整数h,表示天坑深度为h。

    输出描述 Output Description

    输出一行,一个整数,表示最多能爬出天坑的女朋友的数量

    样例输入 Sample Input

    2

    20 10

    5 5

    35

    样例输出 Sample Output

    1

    数据范围及提示 Data Size & Hint

    对于40%数据,n≤100

    对于100%数据,n≤2000,ai,bi,h≤100000

    代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int f[4001],n,h,ans;
    struct node
    {
        int ax,ay;
    }a[2001];
    bool cmp(const node&x,const node&y)
    {
        return x.ax+x.ay<y.ax+y.ay;
    }
    int main()
    {
        int i,j;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
          scanf("%d%d",&a[i].ax,&a[i].ay);
        scanf("%d",&h);
        memset(f,-1,sizeof(f));
        f[0]=0;
        for(i=1;i<=n;i++)
          f[0]+=a[i].ax;
        sort(a+1,a+n+1,cmp);
        for(i=1;i<=n;i++)
           for(j=ans;j>=0;j--)
           {
              if(f[j]+a[i].ay>=h)
                 f[j+1]=max(f[j+1],f[j]-a[i].ax);
              if(f[ans+1]>=0) 
                ans++;
           }
         printf("%d",ans);
         return 0;
    }
  • 相关阅读:
    TCP IP基础知识的复习
    Design Pattern: Singleton 模式
    解决Win7下安装VS2010不显示序列号框的两种方法
    字典树(Trie tree)
    在VS如何查看汇编代码
    使用模板实现编译期间多态
    一段c++代码小例子
    C++ 虚函数表解析
    C++问题:if( input.rdstate() & std::ios::failbit )
    Design Pattern: Adapter 模式 Class Adapter
  • 原文地址:https://www.cnblogs.com/jyhywh/p/6067246.html
Copyright © 2020-2023  润新知