60分求助

P1478 陶陶摘苹果(升级版)

lizhaoqi @ 2023-12-18 20:51:46

#include<bits/stdc++.h>
using namespace std;
int n,s,a,b,cah,cnt;
struct node{
    int high,stren,can=1;
}apple[5005];
int cmp(node x,node y){
    if(x.can>y.can){
        return x.can>y.can;
    }else{
        return x.stren<y.stren;
    }
}
int main(){
    cin>>n>>s>>a>>b;
    cah=a+b;
    for(int i=1;i<=n;i++){
        cin>>apple[i].high>>apple[i].stren;
        if(apple[i].high>cah){
            apple[i].can=0;
        }
    }
    sort(apple+1,apple+n+1,cmp);
    int i=1;
    while(s>0){
        if(apple[i].can==0){            
            break;
        }
        s-=apple[i].stren;
        cnt++;
//      cout<<apple[i].high<<" "<<apple[i].stren<<" "<<apple[i].can<<" "<<s<<endl;
        i++;
    }
    if(s<0){
        cnt--;
    }
    cout<<cnt;
    return 0;
}

(备注:node是苹果的相关信息,high是高度,stren是花费的力气,can是能否能够到)


by lizhaoqi @ 2023-12-18 20:52:50

请各位大佬帮忙看一下哪里出的问题,谢谢!


by Ahws_rwhy @ 2023-12-18 20:57:06

@lizhaoqi

#include <bits/stdc++.h>
using namespace std;
int n,s,a,b,x,high[100000],y,strength[100000];
long long rum,num; 
int main()  
{
    cin>>n>>s; //输入苹果数和力气
    cin>>a>>b; //输入椅子的高度和手伸直的最大长度
   int sum=a+b; //总共能够到的高度应为椅子高度+手能够到的高度
    for(int i=1;i<=n;i++)
    {
     cin>>x>>y;//读入 苹果高度和 摘这个苹果需要的力气
        if(x<=sum)
        {
            high[rum]=x;//更新高 
            strength[rum]=y; //更新力气 
            rum++; //更新 
        }
    } 
    sort(strength,strength+rum+1);//对所需要力气进行排序

for(int i=1;i<=n;i++)
    {
        s-=strength[i]; //减去力气 
        if(s<0) //判断超过还是不够力气 
        {
            break;
        }
       num++;//否则更新苹果数 
    }
   cout<<num; //输出 
    return 0;
}

自己看一下吧。


by lizhaoqi @ 2023-12-19 21:25:36

@rwhy 感谢您!


|