蒟蒻80分求助(;´༎ຶД༎ຶ`)

P1478 陶陶摘苹果(升级版)

Doshe @ 2024-07-23 19:01:58

#include <iostream>
#include<algorithm>
using namespace std;
typedef struct zsg{
    int h;
    int lq;

}zsg;

bool cmp2(zsg a,zsg b){
    return a.lq<b.lq;
}
int main(){
    int n,s,a,b;
    cin>>n>>s;
    cin>>a>>b;
    zsg zb[5005];
    for(int i=0;i<n;i++){
        scanf("%d %d",&zb[i].h,&zb[i].lq);
    }
    sort(zb,zb+n,cmp2);
    int sum=0;
    int i=0;
    int sum2=0;
    while(sum<=s&&i<n){
        if(zb[i].h<=(a+b)){
        sum2++;
        sum+=zb[i].lq;
        }
        i++;
    }   
    if(sum<s) cout<<sum2;
    if(sum>=s) cout<<sum2-1;
}

by Doshe @ 2024-07-23 19:09:02

h是果子的高度,lq是摘取这个果子所需要的力气,我的大致思路是用结构体数组,把每个果子看作一个结构体,对结构体的力气进行排序(从小到大),在果子高度小于板凳高度加上人的最大高度(也就是a+b)时力气从小到大进行加,以此来计算可以摘得的最大果子数量。


by like_dzpd_ @ 2024-07-23 19:18:41

这题可以换一个简单一点的思路,没必要这样去做


by like_dzpd_ @ 2024-07-23 19:22:31

dfs应该可以实现


by Doshe @ 2024-07-23 19:26:40

@likedzpd 谢谢dalao,问题已解决,dfs这种思路我回来再尝试尝试


by Finner_forgeter @ 2024-07-23 19:27:50

其实你只是最后的判断等于号写错位置了

#include <iostream>
#include<algorithm>
using namespace std;
typedef struct zsg{
    int h;
    int lq;

}zsg;

bool cmp2(zsg a,zsg b){
    return a.lq<b.lq;
}
int main(){
    int n,s,a,b;
    cin>>n>>s;
    cin>>a>>b;
    zsg zb[5005];
    for(int i=0;i<n;i++){
        scanf("%d %d",&zb[i].h,&zb[i].lq);
    }
    sort(zb,zb+n,cmp2);
    int sum=0;
    int i=0;
    int sum2=0;
    while(sum<=s&&i<n){
        if(zb[i].h<=(a+b)){
        sum2++;
        sum+=zb[i].lq;
        }
        i++;
    }   
    if(sum<=s) cout<<sum2;
    if(sum>s) cout<<sum2-1;
}

by like_dzpd_ @ 2024-07-23 19:27:54

没事


by Finner_forgeter @ 2024-07-23 19:28:17

上面那个发错了,不好意思


by like_dzpd_ @ 2024-07-23 19:28:36

(应该不知道我是小孩)


by Doshe @ 2024-07-23 19:30:57

@Finner_forgeter 嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯。哭死


by Finner_forgeter @ 2024-07-23 19:32:40

@Doshe 提示一下,以后记得加return 0;哈,不然比赛会爆零的


| 下一页