ywhzt @ 2017-09-04 21:58:47
#include<bits/stdc++.h>
using namespace std;
struct ccc{
int h;
int l;
};
int main()
{
int c,d,n,s,a,b,e,f;
cin>>n>>s>>a>>b;
ccc g[n];
for(c=0;c<n;c++)
{
cin>>e>>f;
if(e>a+b)
continue;
g[c].h=e;
g[c].l=f;
}
for(c=0;c<n;c++)
for(d=c+1;d<n;d++)
{
if(g[c].l>g[d].l)
swap(g[c],g[d]);
}
e=0;
for(c=0;c<n;c++)
{
s-=g[c].l;
if(s>0)
e++;
else
break;
}
cout<<e<<endl;
}
by MscWood @ 2017-09-05 21:08:21
80分程序求改
by MscWood @ 2017-09-05 21:08:34
#include<iostream>
#include<cstdio>
#include<algorithm>
struct apple {int h,t;};
apple a[5100],b[5100]; //结构体h表示高度,t表示消耗体力
int camp(apple x,apple y)
{
if(x.t <y.t )return 1;
else return 0;
} //自定义排序函数
using namespace std;
int main()
{
int ans=0,n,s,sh,bd,j,num;
j=0;
cin>>n>>s;
cin>>bd>>sh;
for(int i=1;i<=n;i++) cin>>a[i].h >>a[i].t ; //读入
for(int i=1;i<=n;i++)
{
if(a[i].h<=sh+bd)
{
j++;
b[j].h=a[i].h;
b[j].t=a[i].t;
}
} //把所有能摘到的筛选出来
num=j;
sort(b+1,b+num+1,camp); //按体力消耗有小到大排序
j=1;
while(1)
{
s-=b[j].t; //如果摘了某个体力为负,就跳出(因为体力按小到大排序了,后面更大)
if(s<0) break;
else {ans++; j++;} //不然个数加一
}
cout<<ans; //输出答案
return 0;
}