3,5测试点错了,谁来帮帮蒟蒻QWQ

P1478 陶陶摘苹果(升级版)

```cpp #include<iostream> using namespace std; int c[101];//定义一百个桶子,c[i]代表用i个力气能摘到的苹果的数目 int main(){ int n,s,h,a,b,i,t=0; cin>>n>>s>>h>>i;h+=i;//输入,借用"i"将淘淘用凳子达到的最大高度复制给"h" for(i=1;i<=n;i++){ cin>>a>>b; if(a<=h)c[b]++;//如果能摘到,就在用b个力气能摘到苹果的桶子中加一 } //接下来 按力气从小到大选苹果 for(i=0;i<=100&&s>=0;i++){//注意要从"0"开始,有苹果是免费的 while(c[i]){//一个桶子里也可有多个苹果 s-=i;//减去摘这个苹果的力气 t++;//摘到的苹果数加一 c[i]--;//桶里的苹果减一个 if(s<0){//当力气没了时结束 t--;//这个苹果没有足够力气摘不了(s<0) break; } } } cout<<t;//输出。 return 0; } ``` 题解
by lanjiaxin404 @ 2023-07-13 11:23:07


数组开小了,至少到3000以上; 排序用sort就好,并且要特判把所有能摘的都摘掉的情况; 代码是这样的 ``` #include<bits/stdc++.h> using namespace std; int main(){ int n,s,a,b,y[5005],mi,ans=0,cnt=0; cin>>n>>s>>a>>b; int h=a+b; for(int i=0,x,t;i<n;i++) { cin>>x>>t; if(x<=h) y[++cnt]=t; } sort(y+1,y+1+cnt); while(s>=y[++ans]) { s-=y[ans]; if(ans>cnt) { cout<<cnt; return 0; } } cout<<ans-1; return 0; } ```
by iBaeJuhyun @ 2023-07-13 11:38:52


@[HanSohee](/user/940972) @[lanjiaxin404](/user/641612) 谢谢两位大佬
by wcop114514 @ 2023-07-14 11:58:24


|