为什么80

P1478 陶陶摘苹果(升级版)

DCzzy @ 2024-12-21 19:40:47

#include<bits/stdc++.h>

using namespace std;

int ans=0;
int n,s,c1,d;
int a[10000],b[10000],c[10000];

int main()
{
    cin>>n>>s>>c1>>d;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];//苹果高度 
        cin>>b[i];//苹果力气 
    }
    for (int i=1;i<=n;i++)
    {
        b[i]=b[i]*1000+i;//方便保存索引和排序 
    }
    c1+=d;//椅子+人高 
    sort(b+1,b+n+1);//排序 
    for (int i=1;i<=n;i++)
    {
        c[i]=b[i]%1000;//数组c保存索引 
    }
    for (int i=1;i<=n;i++)
    {
        b[i]/=1000;//还原力气 
    }
    for (int i=1;i<=n;i++)
    {
        if(s<0) break; 
        if (a[c[i]]<=c1/*判断高度*/&&s>=b[i]/*判断力气*/)
        {
            ans++;/*可以拿的苹果数目*/
            s-=b[i];//减力气 

        }
    }
    cout<<ans;//输出 
    return 0;
}

by wangshengchen @ 2024-12-21 19:52:31

#include<iostream>
#include<algorithm>
using namespace std;
struct app{
    int x,y;
}f[5010],c[5010];
bool com(const app &a, const app &b) { //自定义排序
    return a.y<b.y;  
}
int main()
{
    int n,s,a,b,test=0,ans=0;
    cin>>n>>s>>a>>b;
    if(s==0){//特判
        cout<<0;
        return 0;
    }
    a+=b;//加高度
    for(int i=0;i<n;i++){
        cin>>c[i].x>>c[i].y;
        if(c[i].x<=a&&c[i].y<=s){
            f[test].x=c[i].x;
            f[test].y=c[i].y;
            test++;
        }
    }
    sort(f,f+test,com);
    if(f[0].y+f[test].y>s) test--;
    for(int i=0;i<test;i++) if(s>=0) ans++,s-=f[i].y;
    cout<<--ans;
    return 0; 
}

求关


by wangshengchen @ 2024-12-21 19:57:05

sort(f,f+test,com);//用的力气最小

by wangshengchen @ 2024-12-21 19:57:18

@DCzzy


by DCzzy @ 2024-12-21 20:06:15

@wangshengchen已关 谢谢


|